熊猫在迭代时进行修改

时间:2019-05-03 11:50:59

标签: python pandas loops class dataframe

我的问题很细微,与修改数据框内的对象有关。请正确阅读或跳过此问题。我当然会尽力简洁地描述它。

在pandas.DataFrame.iterrows的Pandas文档中,有一条警告:

您永远不要修改要迭代的内容。不能保证在所有情况下都能正常工作。根据数据类型,迭代器将返回副本而不是视图,并且对其进行写入将无效。

http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html

但是pandas.DataFrame.itertuples的文档没有此警告。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.itertuples.html

请注意,由于性能方面的优势,我通常总是使用pandas.DataFrame.itertuples。

问题:

我下面有一个名为 myclass 的类,它具有一种名为 add_year 的方法,该方法修改了属性,并从Dataframe的同一行中的另一列传递了参数

我创建了一个数据框,其中一列保存了该对象的实例。

我想遍历此列中的行,并使用从数据框传递的参数将类方法 add_year 应用于每个实例

下面的代码示例成功完成了此操作。但是,我对pandas.DataFrame.iterrows上的警告感到担心,因为这可能会导致问题,因为即使我使用的是pandas.DataFrame.itertuples,我也在迭代过程中修改了Dataframe。

有人知道这种方法是否会引起问题?如果可以的话,我该怎么用?

import pandas as pd

class myclass:

    def __init__(self,name):
        self.name = name

    def add_year(self,year):
        self.year = year

objOne = myclass('Andy')
objTwo = myclass('Joe')

d = {'myClassCol': [objOne, objTwo], 'OtherData': ['2018', '2019']}
df = pd.DataFrame(data=d)

for row in df.itertuples():
    df.at[row.Index,'myClassCol'].add_year(df.at[row.Index,'OtherData'])

0 个答案:

没有答案
相关问题