将 Pandas DataFrame 的行作为字典进行迭代

我需要遍历 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])

关于如何提高性能的任何建议?我尝试使用 try 进行迭代df.iterrows(),但出现以下错误:


类型错误:** 之后的 myfunc() 参数必须是映射,而不是元组


我也试过df.itertuples()and df.values,但要么我遗漏了一些东西,要么意味着我必须将每个元组/ np.array 转换为 pd.Series 或 dict ,这也会很慢。我的限制是脚本必须使用 python 2.7 和 pandas 0.14.1。


POPMUISE
浏览 178回答 3
3回答

阿波罗的战车

你可以试试:for k, row in df.iterrows():     myfunc(**row)这k是数据帧索引并且row是一个字典,因此您可以使用以下方式访问任何列:row["my_column_name"]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python