在向该数据帧添加新列之后向预分配的数据帧添加新行时,我有意外的行为。
我创建了以下最小示例(使用Python 3.6.5和Panda 0.23.0):
首先,我创建一个具有3列的预先分配的DataFrame
import pandas as pd
df = pd.DataFrame(columns=('A', 'B', 'C'), index=range(5))
# The resulting DataFrame df
# A B C
#0 NaN NaN NaN
#1 NaN NaN NaN
#2 NaN NaN NaN
#3 NaN NaN NaN
#4 NaN NaN NaN
然后,我要添加几行,其工作方式与预期的一样
new_row = {'A':0, 'B':0, 'C':0}
df.loc[0] = new_row
df.loc[1] = new_row
df.loc[2] = new_row
# The resulting DataFrame df
# A B C
#0 0 0 0
#1 0 0 0
#2 0 0 0
#3 NaN NaN NaN
#4 NaN NaN NaN
然后,我要添加一个具有默认值的新列
df['D'] = 0
# The resulting DataFrame df
# A B C D
#0 0 0 0 0
#1 0 0 0 0
#2 0 0 0 0
#3 NaN NaN NaN 0
#4 NaN NaN NaN 0
最后,在添加新列之后添加新行,我得到了
new_row = {'A':0, 'B':0, 'C':0, 'D':0}
df.loc[3] = new_row
# The resulting DataFrame df
# A B C D
#0 0 0 0 0
#1 0 0 0 0
#2 0 0 0 0
#3 A B C D
#4 NaN NaN NaN 0
因此,由于某种原因,它暗示了DataFrame标头是作为新行而不是实际值添加的。难道我做错了什么?我注意到只有在使用index=range(5)
设置表的大小时才会发生这种情况。如果我不设置表的大小,则添加列和行的工作将如预期的那样。但是,由于性能问题,我想预先分配表。
答案 0 :(得分:1)
这是数据类型的问题。创建数据框而不指定任何数据时,它会自动将数据类型object
分配给所有列。
像这样创建数据框:
df = pd.DataFrame(columns=('A', 'B', 'C'), index=range(5), data=0)