使用 pandas 数据帧值进行迭代

Iteration using pandas dataframe values

在循环迭代时,如果满足条件则更改值。 但是,原始数据框保持不变。 有办法解决吗?

(我知道itertuples,iterrows loc可以用。但是我想用values。(更快))

import panda as pd
df = pd.read_csv(filename)
for value in df.values:
  if A:
    value[2] = 3
  print(value) # changed
df.to_csv(newfilename) # unchanged

CSV 也应该更改。我刚刚对此进行了测试,它发生了变化:

import pandas as pd
df = pd.DataFrame({
    'A': [0,1,0,0,1,1,0,1,0],
    'B': [1,0,1,1,0,0,1,0,1],
})

for value in df.values:
    if value[0]==0:
        value[1]=5
        print(value) # changed
df #also changed
df.to_excel("output.xlsx") #also changed

按照 mozway 的建议,尝试矢量化代码。当您使用 pandas.

时,这通常是一件好事
df.loc[CONDITION, COLUMN_NAME_TO_WRITE_TO] = NEW_VALUE

对于您的示例,可能类似于

import panda as pd
df = pd.read_csv(filename)
df.loc[A, df.columns[2]] = 3      # instead of df.columns[INDEX] you could directly use the column name
df.to_csv(newfilename)

我使用 iat 进行了鞋底处理。

import panda as pd
df = pd.read_csv(filename)
cnt = 0
for value in df.values:
  if A:
    #value[2] = 3
    df[cnt, 2] = 3
  print(value) # changed
  cnt += 1
df.to_csv(newfilename) # changed

此外,迭代(秒):df.values < itertuples < iterrows