首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将DataFrame.append替换为pd.concat,以便将系列附加为行?

如何将DataFrame.append替换为pd.concat,以便将系列附加为行?
EN

Stack Overflow用户
提问于 2022-04-21 17:16:22
回答 2查看 371关注 0票数 1

我有一个具有数值的数据框架,如

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

我在一行中添加了所有的列和

代码语言:javascript
运行
复制
totals = df.sum()
totals.name = 'totals'
df_append = df.append(totals)

很简单。以下是dftotalsdf_append的值

代码语言:javascript
运行
复制
>>> df
   A  B
0  1  2
1  3  4

>>> totals
A    4
B    6
Name: totals, dtype: int64

>>> df_append
        A  B
0       1  2
1       3  4
totals  4  6

不幸的是,在较新版本的pandas中,不推荐使用DataFrame.append方法,并将在未来的pandas版本中删除该方法。建议将其替换为pandas.concat

现在,按照以下方式天真地使用pd.concat

代码语言:javascript
运行
复制
df_concat_bad = pd.concat([df, totals])

产生

代码语言:javascript
运行
复制
>>> df_concat_bad
     A    B    0
0  1.0  2.0  NaN
1  3.0  4.0  NaN
A  NaN  NaN  4.0
B  NaN  NaN  6.0

显然,在df.append中,Series对象被解释为一行,而pd.concat则被解释为列。

您不能使用像用pd.concat调用axis=1这样的方法来修复这个问题,因为这样会将总计添加为列:

代码语言:javascript
运行
复制
>>> pd.concat([df, totals], axis=1)
     A    B  totals
0  1.0  2.0     NaN
1  3.0  4.0     NaN
A  NaN  NaN     4.0
B  NaN  NaN     6.0

(在本例中,结果与使用默认的axis=0相同,因为dftotals的索引是不相交的,它们的列名也是不相交的。)

如何处理(优雅和高效)?

EN

回答 2

Stack Overflow用户

发布于 2022-04-21 17:16:22

解决方案是使用totals (一个Series对象)使用to_frame()DataFrame (然后是一个列)转换为DataFrame,然后使用T转换它。

代码语言:javascript
运行
复制
df_concat_good = pd.concat([df, totals.to_frame().T])

产生所需的

代码语言:javascript
运行
复制
>>> df_concat_good
        A  B
0       1  2
1       3  4
totals  4  6
票数 2
EN

Stack Overflow用户

发布于 2022-09-08 08:07:26

pd.concat()相比,我更喜欢用pd.concat()来解决这个问题。

df.loc["totals"]=df.sum()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71958421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档