2016-07-14 73 views
4

我在熊貓數據框中發現了一個我不明白的行爲。用字典更新熊貓數據框行

df = pd.DataFrame(np.random.randint(1, 10, (3, 3)), index=['one', 'one', 'two'], columns=['col1', 'col2', 'col3']) 
new_data = pd.Series({'col1': 'new', 'col2': 'new', 'col3': 'new'}) 
df.iloc[0] = new_data 
# resulting df looks like: 

#  col1 col2 col3 
#one new  new  new 
#one 9  6  1 
#two 8  3  7 

但是,如果我嘗試添加一本字典,而不是,我得到這個:

new_data = {'col1': 'new', 'col2': 'new', 'col3': 'new'} 
df.iloc[0] = new_data 
# 
#   col1 col2 col3 
#one  col2 col3 col1 
#one  2  1  7 
#two  5  8  6 

這究竟是爲什麼?在寫這個問題的過程中,我意識到,最有可能的df.loc只是從new_data中獲取密鑰,這也解釋了爲什麼這些值不符合要求。但是,這又是爲什麼呢?如果我嘗試從字典中創建一個數據幀,它處理的按鍵,好像他們是列:

pd.DataFrame([new_data]) 

# col1 col2 col3 
#0 new  new  new 

,這是爲什麼不df.loc默認行爲?

回答

4

字典迭代方式與熊貓系列處理方法之間的區別。

熊貓系列將它的索引與分配給某一行的列相匹配,並在分配給列時與索引相匹配。之後,它會分配與該匹配的索引或列相對應的值。

當一個對象不是一個帶有方便的索引對象的pandas對象來匹配它時,pandas將遍歷該對象。一本字典會遍歷它的關鍵字,這就是爲什麼您會在該行槽中看到字典鍵的原因。字典沒有排序,這就是爲什麼你看到在那一行中洗牌的鍵。