在添加新列之后,Python Pandas将列标题添加为条目,而不是实际数据

时间:2018-10-08 15:52:06

标签: python pandas

在向该数据帧添加新列之后向预分配的数据帧添加新行时,我有意外的行为。

我创建了以下最小示例(使用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)设置表的大小时才会发生这种情况。如果我不设置表的大小,则添加列和行的工作将如预期的那样。但是,由于性能问题,我想预先分配表。

1 个答案:

答案 0 :(得分:1)

这是数据类型的问题。创建数据框而不指定任何数据时,它会自动将数据类型object分配给所有列。

像这样创建数据框:

df = pd.DataFrame(columns=('A', 'B', 'C'), index=range(5), data=0)