我正在编写一个脚本,当满足条件时,该脚本应该读取大量 csv 文件并转换特定列中的数据。 为此,我有一个如下所示的 for 循环:
for index, transformed_row in transformed_data.iterrows():
new_rows = []
if transformed_row['Code'] in ['14/9', '14+9', '149']:
transformed_row['Code'] = '18'
elif transformed_row['Code'] == "3+4+1":
transformed_row['Code'] = '17'
但是我在 Pandas 文档中读到,使用 .iterrows() 时不应修改 DataFrame。尽管此代码有效并且我的输出 DF 正是我想要的方式,但我担心超过 50 个 csv 文件这并不总是按照文档中所述工作。
所以我的想法是制作一个新列表
new_rows = []
并使用类似这样的内容添加更改的行
new_rows.append(transformed_row.copy())
但是,当我这样做时,我得到了我想要转换的行的重复项。我找不到如何正确执行此操作的解决方案...
您所面临的重复问题是因为您要附加整个transformed_row的副本
以下是修改代码的方法。
new_rows = []
for index, transformed_row in transformed_data.iterrows():
new_row = transformed_row.copy() # Create a copy of the original row
if transformed_row['Code'] in ['14/9', '14+9', '149']:
new_row['Code'] = '18'
elif transformed_row['Code'] == "3+4+1":
new_row['Code'] = '17'
new_rows.append(new_row) # Append the modified row to the new list
# Now you can create a new DataFrame from new_rows
new_dataframe = pd.DataFrame(new_rows)