我在pandas的数据框中发现了一个行为,但我不理解。
但如果我尝试添加一个字典,会得到如下结果:
为什么df.loc的默认行为不是这样呢?
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中获取键,这也解释了值为什么是无序的。但是,为什么会这样呢?如果我尝试从字典创建一个DataFrame,它会将键处理为列:
pd.DataFrame([new_data])
# col1 col2 col3
#0 new new new
为什么df.loc的默认行为不是这样呢?
df.loc[0] = pd.Series(new_data)
相比,如果new_data
的键不匹配df
的列,则此方法也适用 - 如果需要,将添加新列。 - rouckas.keys()
和.values()
周围加上list()
,这个方法就无法正常工作。 - Joe Flack