我的问题很细微,与修改数据框内的对象有关。请正确阅读或跳过此问题。我当然会尽力简洁地描述它。
在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'])