我有一個熊貓數據框。在這個DataFrame中,我想修改一些行的幾列。這些是我嘗試的方法。在熊貓中的行子集中修改多個列DataFrame
df[['finalA', 'finalB']] = df[['A', 'B']]
exceptions = df.loc[df.normal == False]
其中用得好好的,但現在我想設置的例外情況:
df.loc[exceptions.index, ['finalA', 'finalB']] = \
df.loc[exceptions.index, ['A_except', 'B_except']]
不工作。所以我嘗試使用this answer的.ix
。
df.ix[exceptions.index, ['finalA', 'finalB']] = \
df.ix[exceptions.index, ['A_except', 'B_except']]
哪一個也不行。兩種方法在finalA
和finalB
中給出了NaN
的例外行。
,似乎工作在同一時間做它一列的唯一方法:
df.ix[exceptions.index, 'finalA'] = \
df.ix[exceptions.index, 'A_except']
df.ix[exceptions.index, 'finalB'] = \
df.ix[exceptions.index, 'B_except']
這是怎麼回事的熊貓嗎?如何避免將值設置爲顯然通過選擇多列來複制的副本?有沒有辦法避免這種代碼重複?
一些更多的思考:它實際上沒有將值設置爲數據幀的副本,它將值設置爲NaN。它實際上將它們覆蓋爲一個新的值。
樣品數據框:
import pandas as pd
df = pd.DataFrame({'A': [1,2,3,4],
'B': [5,6,7,8],
'normal': [True, True, False, False],
'A_except': [0,0,9,9],
'B_except': [0,0,10,10]})
結果:
A A_except B B_except normal finalA finalB
0 1 0 5 0 True 1.0 5.0
1 2 0 6 0 True 2.0 6.0
2 3 9 7 10 False NaN NaN
3 4 9 8 10 False NaN NaN
預期結果:
A A_except B B_except normal finalA finalB
0 1 0 5 0 True 1 5
1 2 0 6 0 True 2 6
2 3 9 7 10 False 9 10
3 4 9 8 10 False 9 10