我在循环熊猫数据框上的积分时遇到一些麻烦。这是我正在使用的CSV的示例:
NAME,Int,K,Z
A,0,12,50
A,1,34,50
A,2,47,35
A,3,19,31
B,0,25,28
B,1,8,3
B,2,4,27
B,3,18,10
C,0,14,15
C,1,10,19
C,2,46,1
C,3,19,41
这是我正在尝试的循环:
def integral(DF):
for i in DF.loc[:]:
integral=integrate.trapz(y=DF.loc[i]['K'],x=DF.loc[i]['Int'],dx=1)
return DF.loc[i] and integral
继续返回错误,指出索引列“ NAME”旁边的列不在索引中。任何帮助,将不胜感激。为了澄清起见,我尝试以“ Int”为x轴获取K&Z列的积分,并返回名称和积分。我的实际CSV比这大得多。
答案 0 :(得分:1)
我尝试了一下,希望对您有所帮助:-
从以上答案中我得出了dataframe
from io import StringIO
import numpy as integrate
s = """
NAME,Int,K,Z
A,0,12,50
A,1,34,50
A,2,47,35
A,3,19,31
B,0,25,28
B,1,8,3
B,2,4,27
B,3,18,10
C,0,14,15
C,1,10,19
C,2,46,1
C,3,19,41
"""
df = pd.read_csv(StringIO(s), sep=',')
print(df)
您还需要转换为float
才能使用numpy
功能
df['Int'] = df['Int'].astype(float)
df['K'] = df['K'].astype(float)
df['Z'] = df['Z'].astype(float)
del df['NAME']
您正在传递布尔返回值,请改用commas
def integral(DF):
for i in DF.loc[:].values: #use values instead
print(i)
integral=integrate.trapz(y=DF.loc[i],x=DF.loc[i],dx=1)
return DF.loc[i], integral
integral(df)
>>
( Int K Z
3.0 3.0 19.0 31.0
19.0 NaN NaN NaN
41.0 NaN NaN NaN, array([476., nan, nan]))
我不确定您想要这种输出,但希望对您有所帮助。