我有兩個 dfs,想用 for 回圈以某種方式操作它們。
我發現在回圈中創建一個新列會更新 df. 但不適用于 set_index 或洗掉列等其他命令。
import pandas as pd
import numpy as np
gen1 = pd.DataFrame(np.random.rand(12,3))
gen2 = pd.DataFrame(np.random.rand(12,3))
df1 = pd.DataFrame(gen1)
df2 = pd.DataFrame(gen2)
all_df = [df1, df2]
for x in all_df:
x['test'] = x[1] 1
x = x.set_index(0).drop(2, axis=1)
print(x)
請注意,當每個 df 按回圈列印時,兩個 dfs 都會完美地執行所有命令。但是當我之后呼叫任何一個df時,只有新列'test'存在,并且'set_index'和'drop'列被撤消。
關于為什么只有一個命令被永久化,我是否遺漏了什么?謝謝你。
uj5u.com熱心網友回復:
這是發生了什么:
x是一個變數,在您的 for 回圈的每次迭代開始時最初參考 list 的一個元素all_df。當您分配給 時x['test'],您正在使用x更新該元素,因此它會執行您想要的操作。
但是,當您將新事物分配給 時x,您只是x在參考該新事物而沒有觸及x之前參考的內容(即all_df您希望更改的元素)。
你可以嘗試這樣的事情:
for x in all_df:
x['test'] = x[1] 1
x.set_index(0, inplace=True)
x.drop(2, axis=1, inplace=True)
print(df1)
print(df2)
請注意,inplace通常不鼓勵使用(例如,請參見此處),因此您可能需要考慮是否有一種方法可以使用基于df1and創建的新 DataFrame 物件來實作您的目標df2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/461292.html
上一篇:C :為;對比{}
