2016-07-14 5 views
4

私が理解していないpandas DataFramesの動作が見つかりました。辞書によるパンダのDataFrame行の更新

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はそのオブジェクトを繰り返し処理します。辞書はそのキーを繰り返し処理するので、その行スロットの辞書キーが表示されます。辞書はソートされていないので、その行にシャッフルされたキーが表示されます。

関連する問題