gpt4 book ai didi

python - 将方法列表中的方法应用到 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-01 11:16:28 25 4
gpt4 key购买 nike

这是我在这里的第一个问题,所以请耐心等待。

我的问题如下:

假设我们有一个 Pandas Dataframe,我们想动态地将一些 pd.Series 方法应用到这个 Dataframe 的一组列。为什么下面的例子不起作用?

testframe=pd.DataFrame.from_dict({'col1': [1,2] ,'col2': [3,4] })
funcdict={'col1':[pd.Series.astype,str.replace],'col2':[pd.Series.astype,str.replace]}
argdict= {'col1':[['str'],['1','A']],'col2':[['str'],['3','B']]}

for col in testframe.columns:
for func in funcdict[col]:
idx=funcdict[col].index(func)
testframe[col]=testframe[col].func(*argdict[col][idx])

预期的结果是
  col1 col2
0 'A' 'B'
1 '1' '4'

但我得到了
AttributeError: 'Series' object has no attribute 'func'

显着
testframe['col1']=testframe['col1'].astype(*argdict['col1'][0])

按预期工作,所以尽管事实上 python 似乎对 '.func' 语法有问题
print(func)
产生所需的输出:'function NDFrame.astype at 0x00000186954EB840'等。

最佳答案

您调用方法的语法不正确。在 Python 中有两种方法可以调用方法。

直销

正如您所发现的,这将起作用。请注意 astype不是引用其他对象,它是属于 pd.Series 的方法的实际名称.

testframe['col1'] = testframe['col1'].astype(*argdict['col1'][0])

功能

函数式方法明确表明 astype是方法的名称。
from operator import methodcaller

testframe['col1'] = methodcaller('astype', *argdict['col1'][0])(testframe[col])

正在尝试 testframe[col].func(...)永远不会像 func 那样工作不是 pd.Series的名字方法。

关于python - 将方法列表中的方法应用到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com