如何将熊猫框架中的列与函数相乘



我有一个包含两列(称为X和Y(的数据文本文件:

-2.321404951 0.6231752828E-20
-2.311404951 0.2386233219E-19
-2.301404951 0.8958714819E-19
-2.291404951 0.3297711248E-18
-2.281404951 0.1190194012E-17
-2.271404951 0.4211777921E-17
-2.261404951 0.1461370397E-16
-2.251404951 0.4971725004E-16
-2.241404951 0.1658482566E-15
-2.231404951 0.5424716898E-15
-2.221404951 0.1739847682E-14
-2.211404951 0.5471662415E-14
-2.201404951 0.1687359166E-13
-2.191404951 0.5102494608E-13
-2.181404951 0.1513043201E-12
-2.171404951 0.4399681358E-12
-2.161404951 0.1254584823E-11
-2.151404951 0.3508293965E-11
-2.141404951 0.9620945929E-11
-2.131404951 0.2587465918E-10
-2.121404951 0.6824586233E-10
-2.111404951 0.1765359553E-09
-2.101404951 0.4478742859E-09

我想通过公式f(X)*Yf(X) = 1/(exp(X)-5)来获得数据。这是我的代码,但它不起作用:

import pandas as pd
import numpy as np
import sys
df = pd.read_csv("dos.txt", sep='delimiter', header=None, engine='python')
F = 1 /  (np.exp((df.loc[:,0] - 5)))
y=df.loc[:,1]*F
print(y)

错误为TypeError: cannot convert the series to <class 'float'>。有人能帮我吗?

您没有为解析CSV文件提供合适的分隔符,因此数据被解析为每行一个字符串,而不是多个数字列。这里有一个修复:

import pandas as pd
import numpy as np
import sys
df = pd.read_csv("dos.txt", sep="s+", header=None, engine='python')
F = 1 /  (np.exp((df.loc[:,0] - 5)))
y=df.loc[:,1]*F
print(y)

另一种方式:

def expnFn(x):
return 1/(np.exp(x)-5)
df['Z'] = df.apply(lambda x: x['X']*expnFn(x['Y']), axis = 1)

X             Y         Z
0  -2.321405  6.231753e-21  0.580351
1  -2.311405  2.386233e-20  0.577851
2  -2.301405  8.958715e-20  0.575351
3  -2.291405  3.297711e-19  0.572851
4  -2.281405  1.190194e-18  0.570351
5  -2.271405  4.211778e-18  0.567851
6  -2.261405  1.461370e-17  0.565351
7  -2.251405  4.971725e-17  0.562851
8  -2.241405  1.658483e-16  0.560351
9  -2.231405  5.424717e-16  0.557851
10 -2.221405  1.739848e-15  0.555351
11 -2.211405  5.471662e-15  0.552851
12 -2.201405  1.687359e-14  0.550351
13 -2.191405  5.102495e-14  0.547851
14 -2.181405  1.513043e-13  0.545351
15 -2.171405  4.399681e-13  0.542851
16 -2.161405  1.254585e-12  0.540351
17 -2.151405  3.508294e-12  0.537851
18 -2.141405  9.620946e-12  0.535351
19 -2.131405  2.587466e-11  0.532851
20 -2.121405  6.824586e-11  0.530351
21 -2.111405  1.765360e-10  0.527851
22 -2.101405  4.478743e-10  0.525351

要解决float问题,需要在调用read_csv时定义dtype。dtype接受一个dict,类似于:

{‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’}

请参阅:https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html.

然后,您可以直接将公式应用于列,类似于:

import pandas as pd, numpy as np
df = pd.DataFrame({ 'x': [1, 2, 3, 4, 5], 'y': [6, 7, 8, 9, 10]})
df['z'] = (1 / (np.exp(df.x) - 5)) * df.y

或者如果你想使用一个功能:

def fn(x, y):
return (1 / (np.exp(x) - 5)) * y
df['z'] = fn(df.x, df.y)

最新更新