【问题标题】:Iteration using pandas dataframe values使用 pandas 数据框值进行迭代
【发布时间】:2022-01-18 07:23:18
【问题描述】:

在翻转迭代时,如果满足条件,则更改值。 但是,原始数据框保持不变。 有没有办法解决这个问题?

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

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

【问题讨论】:

  • 循环值并不快。使用矢量代码。您的代码不起作用,因为您修改了副本。
  • 如果它不起作用,性能就无关紧要了。如果您只是想更改某些字段,为什么要涉及非常大且加载缓慢的 pandas 模块?只需要一行一行地做。
  • 不,使用值比 itertuples、iterrows、loc 更丰富。我刚刚使用 iat 解决,count idx 然后使用 df.iat[count, 2] = 3 而不是 value[2] = 3

标签: python pandas csv iteration


【解决方案1】:

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

【讨论】:

  • 谢谢你的回答。我刚刚使用 iat 解决,count idx 然后使用 df.iat[count, 2] = 3 而不是 value[2] = 3
【解决方案2】:

按照 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 解决,count idx 然后使用 df.iat[count, 2] = 3 而不是 value[2] = 3
【解决方案3】:

我使用 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

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2021-12-12
    • 2023-01-14
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 2017-01-04
    相关资源
    最近更新 更多