我需要迭代pandas数据框以便将每一行作为函数(实际上是类构造函数)的参数传递,使用**kwargs
。这意味着每一行应该像字典一样运作,其中键是列名,值是每一行对应的值。
这是可行的,但效率非常低:
import pandas as pd
def myfunc(**kwargs):
try:
area = kwargs.get('length', 0)* kwargs.get('width', 0)
return area
except TypeError:
return 'Error : length and width should be int or float'
df = pd.DataFrame({'length':[1,2,3], 'width':[10, 20, 30]})
for i in range(len(df)):
print myfunc(**df.iloc[i])
有没有建议如何使其更高效?我尝试使用 df.iterrows()
遍历,但是出现以下错误:
TypeError: myfunc() argument after ** must be a mapping, not tuple
我也尝试过使用 df.itertuples()
和 df.values
,但是要么我漏掉了什么,要么这意味着我必须将每个元组/np.array转换为 pd.Series 或 dict,这也会很慢。
我的限制是脚本必须在 Python 2.7 和 Pandas 0.14.1 中运行。