将方法列表中的方法应用于 pandas 数据框

2024-03-26

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

我的问题如下:

假设我们有一个 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 中调用方法有两种方法。

Direct

正如您所发现的,这会起作用。注意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])

Trying testframe[col].func(...)永远不会像func不是 a 的名字pd.Series method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将方法列表中的方法应用于 pandas 数据框 的相关文章

随机推荐