print我在來自and的 for 回圈中得到不同的結果df.at。這可以解釋嗎?
import pandas as pd
data = [['A', []], ['B', []], ['C', []], ['D', []]]
df = pd.DataFrame(data, columns = ['Act', 'PreviousActs'])
actssofar = []
for i, row in df.iterrows():
actssofar.append(row['Act'])
print (i, actssofar)
df.at[i,'PreviousActs'] = actssofar
現在,printfor回圈中函式的輸出是這樣的:
0 ['A']
1 ['A', 'B']
2 ['A', 'B', 'C']
3 ['A', 'B', 'C', 'D']
但是資料幀的輸出是這樣的:
| 使徒行傳 | 以前的行為 |
|---|---|
| 一種 | A B C D |
| 乙 | A B C D |
| C | A B C D |
| D | A B C D |
從邏輯上講,它不應該顯示與列印函式相同的逐步附加行為嗎,因為我們正在用相同的值填充資料幀?
uj5u.com熱心網友回復:
如果我理解正確,問題是,當回圈完成時,您的資料框包含['A', 'B', 'C', 'D']所有行。發生這種情況是因為您將串列作為“參考”傳遞,這意味著所有行都存盤相同的串列。每次將新串列分配給資料框時,都應該添加一個list()呼叫來創建一個新串列。
import pandas as pd
data = [['A', []], ['B', []], ['C', []], ['D', []]]
df = pd.DataFrame(data, columns = ['Act', 'PreviousActs'])
actssofar = []
for i, row in df.iterrows():
actssofar.append(row['Act'])
print (i, actssofar)
df.at[i,'PreviousActs'] = list(actssofar)
更新了利用可變性并且記憶體效率更高的答案,因為它只創建一個串列。
import pandas as pd
data = [['A', []], ['B', []], ['C', []], ['D', []]]
df = pd.DataFrame(data, columns = ['Act', 'PreviousActs'])
actssofar = []
for i, row in df.iterrows():
actssofar.append(row['Act'])
print (i, actssofar)
df.at[i,'PreviousActs'] = actssofar[:i 1]
uj5u.com熱心網友回復:
您需要先復制串列,然后再將其放入 DataFrame。它是一個可變物件,您當前存盤在 DataFrame 中的是對原始串列的參考,而不是它的副本。PreviousActs 列中的每個元素都是同一個串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/480590.html
上一篇:比較兩個資料幀中的兩個不同列
下一篇:通過`.to_dict()`,pandas將Python字典中的`NaN`轉換為`nan`;如何檢查python中是否存在'nan'
