我在这里找到了线程:
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不为空。
答案 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