2017-10-15 43 views
2

刪除列後,我無法用相同的名稱添加它,這似乎很奇怪。所以我創建了一個帶有多標籤列的簡單數據框,並添加一個只有level0名稱的新列,然後刪除它。刪除後,無法將列重新添加到pandas多索引數據框中

>>> import pandas as pd 
>>> df = pd.DataFrame([[1,2,3],[4,5,6]]) 
>>> df.columns=[['a','b','c'],['e','f','g']] 
>>> print(df) 
    a b c 
    e f g 
0 1 2 3 
1 4 5 6 
>>> df['d'] = df.c+2 
>>> print(df) 
    a b c d 
    e f g 
0 1 2 3 5 
1 4 5 6 8 
>>> del df['d'] 
>>> print(df) 
    a b c 
    e f g 
0 1 2 3 
1 4 5 6 

現在我嘗試再次添加它,它似乎沒有任何效果,並且沒有顯示錯誤或警告。

>>> df['d'] = df.c+2 
>>> print(df) 
    a b c 
    e f g 
0 1 2 3 
1 4 5 6 

這是預期的行爲嗎?我應該向熊貓項目報告一個錯誤報告嗎?有沒有這樣的問題,如果我加上「D」與這兩個級別列指定,這樣

df['d', 'x'] = df.c+2 

謝謝, PS:Python是2.7.14和熊貓0.20.1

回答

1

有問題你MultiIndex平呼籲del後不會被刪除:

del df['d'] 
print(df) 
    a b c 
    e f g 
0 1 2 3 
1 4 5 6 

檢查列:

print (df.columns) 
MultiIndex(levels=[['a', 'b', 'c', 'd'], ['e', 'f', 'g', '']], 
      labels=[[0, 1, 2], [0, 1, 2]]) 

解刪除是MultiIndex.remove_unused_levels

df.columns = df.columns.remove_unused_levels() 

print (df.columns) 
MultiIndex(levels=[['a', 'b', 'c'], ['e', 'f', 'g']], 
      labels=[[0, 1, 2], [0, 1, 2]]) 

df['d'] = df.c+2 
print (df) 
    a b c d 
    e f g 
0 1 2 3 5 
1 4 5 6 8 

另一種解決方案是reaasign到多指標,需要針對tuple選擇MultiIndex柱:

df[('d', '')] = df.c+2 
print (df) 
    a b c d 
    e f g 
0 1 2 3 5 
1 4 5 6 8 
+0

確定,理解。謝謝你的幫助! – crayxt

相關問題