将行追加到熊猫DF添加0列-澄清

时间:2018-08-22 16:15:53

标签: python python-3.x pandas dataframe

我在这里找到了线程:

Appending row to pandas df adds 0 column

但是我还是不明白我在做什么错。

df4 = pd.DataFrame({'Q':['chair', 'desk', 'monitor', 'chair'], 'R':['red', 'blue', 'yellow', 'purple'], 'S': ['english', 'german', 'spanish', 'english']})

df4

         Q       R        S
0    chair     red  english
1     desk    blue   german
2  monitor  yellow  spanish
3    chair  purple  english


>> df5 = df4

>>> df5 = df5.append(['Q'] * 2, ignore_index=True)

>>> df5

         Q       R        S    0
0    chair     red  english  NaN
1     desk    blue   german  NaN
2  monitor  yellow  spanish  NaN
3    chair  purple  english  NaN
4      NaN     NaN      NaN    Q
5      NaN     NaN      NaN    Q
>>> 

在我的情况下,为什么要添加0列?我最初的DF不为空。

2 个答案:

答案 0 :(得分:2)

您正在尝试将列表['Q', 'Q']附加到具有3列的数据框中。这是模棱两可的。

由于目前还不清楚,因此Pandas决定在追加之前将['Q', 'Q']传递给pd.DataFrame构造函数:

out1 = df5.append(pd.DataFrame(['Q'] * 2), ignore_index=True)
out2 = df5.append(['Q'] * 2, ignore_index=True)

assert out1.equals(out2)  # no error, i.e. these are equal

如果仍然感到困惑,请尝试打印从单个列表构造的数据框:

print(pd.DataFrame(['Q'] * 2))

   0
0  Q
1  Q

由于未指定列名,因此您有一列标记为0的列。当附加到具有不同列的数据框时,您必然会在结果中看到另外一列。

答案 1 :(得分:2)

熊猫帮助页面附加状态: “将其他行添加到该框架的末尾,返回一个新对象。不在此框架中的列将作为新列添加。”

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.append.html

在您的情况下,您没有任何供应列名称,因此创建了新的列。

许多方法可以添加新行。一种方式:

warning: definition of implicit copy assignment operator for 'CDbMappingComponentAware' is deprecated because it has a user-declared destructor