我有一个具有数值的数据框架,如
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])我在一行中添加了所有的列和
totals = df.sum()
totals.name = 'totals'
df_append = df.append(totals)很简单。以下是df、totals和df_append的值
>>> 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
df_concat_bad = pd.concat([df, totals])产生
>>> 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这样的方法来修复这个问题,因为这样会将总计添加为列:
>>> 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相同,因为df和totals的索引是不相交的,它们的列名也是不相交的。)
如何处理(优雅和高效)?
发布于 2022-04-21 17:16:22
解决方案是使用totals (一个Series对象)使用to_frame()将DataFrame (然后是一个列)转换为DataFrame,然后使用T转换它。
df_concat_good = pd.concat([df, totals.to_frame().T])产生所需的
>>> df_concat_good
A B
0 1 2
1 3 4
totals 4 6发布于 2022-09-08 08:07:26
与pd.concat()相比,我更喜欢用pd.concat()来解决这个问题。
df.loc["totals"]=df.sum()
https://stackoverflow.com/questions/71958421
复制相似问题