我经常使用下面的方法向 Dataframe 追加一行。我非常喜欢它的一点是它允许你追加一个简单的dict对象。例如:
# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])
# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)
同样,我最喜欢的是代码非常干净,需要很少的行。现在我想推荐的替代方法是:
# Create the new row as its own dataframe
df_new_row = pd.DataFrame({ 'a': [1], 'b': [2] })
df = pd.concat([df, df_new_row])
因此,以前的一行代码现在是两行,其中有一个一次性变量和额外的cruft,我在这里创建了新的 Dataframe 。:(有没有一个好的方法来做到这一点,只是使用一个像我在过去的dict(这是不赞成的)?
8条答案
按热度按时间nue99wik1#
如果需要的话,用字典创建一个列表,然后用
df = pd.DataFrame.from_records(your_list)
创建一个新的 Dataframe 。列表的“append”方法非常有效,永远不会被弃用。另一方面,由于 Dataframe 的设计,它们经常需要重新创建,并且所有数据都要复制到append上-这就是为什么他们弃用该方法ndh0cuux2#
我也喜欢append方法。但是你可以在一行中用一个dict列表来完成它
或者对具有递增索引的DataFrame上的值使用loc和元组
或者也许
ff29svar3#
如果要改用
concat
:append
concat
ldfqzlk84#
我也遇到过类似的问题。其他的解决方案对我来说都不太管用。我把这个答案留在这里,作为解决这个问题的一个额外的可能性,因为这是谷歌对某些搜索的第一个结果,我自己至少第二次在这里结束了。
在我的例子中,数据不是一个dict,而只是一组已知参数的值的列表。我希望将参数值作为行添加到 Dataframe 中,因为这样我就可以通过df[parameter]访问一个参数的一系列所有值。
我从一个空DataFrame开始:
df:
使用append,我可以非常方便地添加行,如下所示:
df:
使用pd.concat时,我发现它以非常相似的方式提供了相同的结果:
关键是从1d数据创建一个(1,n) Dataframe ,然后将其转置以匹配其他 Dataframe 。
drkbr07n5#
对于那些像我一样想要一个描述性函数而不是大量单行程序的人来说,这里有一个基于上面的@Rafael Gaitan的选项。
pxy2qtax6#
nnt7mjpx7#
Python的at()方法使我们能够一次更新一行相对于一列的值。
wvyml7n58#
以前在我的程序中使用 DataFrame.append 时也遇到过这个问题,但现在已经解决了。希望这个代码段能有所帮助。