在pandas DF后面添加行,添加0列说明

2024-05-21 04:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里找到了一条线:

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列?我的初始数据框不是空的。在


Tags: englishbluerednanmonitorrowgermanpurple
2条回答

pandas append states的帮助页面: “将其他行追加到此帧的末尾,返回一个新对象。不在此框架中的列将作为新列添加。“

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

在您的例子中,您没有提供任何列名,因此创建了新的列名。在

有很多方法可以附加新行。单向:

df5 = df5.append({'Q':'Q', 'R':'Q', 'S':'Q'}, ignore_index=True)

您正试图将列表['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

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

^{pr2}$

由于没有指定列名,因此有一个列标记为0。当用不同的列附加到一个dataframe时,您必须在结果中看到一个额外的列。在

相关问题 更多 >