Python 玩转数据 16 - Pandas 数据处理 追加 df.append()

本文详细介绍了Pandas中用于数据追加的`df.append()`方法,包括如何追加DataFrame、Series和字典类型的数据。强调了`df.append()`在效率上的不足,并推荐使用`pd.concat()`。通过示例展示了不同追加操作的结果,如保留和忽略索引,以及如何处理重复索引。此外,还提供了Series和字典追加时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

本文主要介绍 pandas 数据追加 df.append(),更多 Python 进阶系列文章,请参考 Python 进阶学习 玩转数据系列

内容提要:
df1.append()
追加 DataFrame
追加 Series
追加 dict 字典

df1.append()

按行追加拼接,将一个 DataFrame 的行拼接到另外一个 DataFrame 的末尾,返回一个新的 DataFrame。如果列名不在第一个 DataFrame出现,则将以新的列名添加,没有对应内容的会为空。不会改变原来的 DataFrame,只会创建一个新的 DataFrame,包含拼接的数据。

重点:因为会创建一个新的 index 和 data buffer,所以效率不高。推荐用 pd.concat(),而且 pd.concat() 功能更强大,详情请参考 Pandas 数据处理 拼接 pd.concat()

df.append(other: DataFrame | Series[Dtype@append] | Dict[_str, Any], ignore_index: _bool = …, verify_integrity: _bool = …, sort: _bool = …)

参数说明
other是它要追加的其他 DataFrame 或者类似序列内容
ignore_index如果为 True 则重新进行自然索引
verify_integrity如果为 True 则遇到重复索引内容时报错
sort进行排序

追加 DataFrame

在这里插入图片描述

两个 df 拼接,并保留原索引:
在这里插入图片描述
多个 df 拼接,在合并不保留原索引,启用新的自然索引
在这里插入图片描述
代码:

import pandas as pd

idnumber = [1,2,5]
fname = ['Kate','John','Eli']
age = [10,20,50]
grade = ['A','B','C']

df1 = pd.DataFrame({'id':idnumber,'fname':fname})
df2 = pd.DataFrame({'age':age,'grade':grade})
df3 = pd.DataFrame({'id':[3,4],'age':[30,40]})
print("df1:\n{}".format(df1))
print("df2:\n{}".format(df2))
print("df3:\n{}".format(df3))

df1_append_df2 = df1.append(df2)
print("df1_append_df2:\n{}".format(df1_append_df2))

df1_append_df2_df3 = df1.append([df2,df3], ignore_index = True)
print("df1_append_df2_df3:\n{}".format(df1_append_df2_df3))

输出:

df1:       
   id fname
0   1  Kate
1   2  John
2   5   Eli
df2:
   age grade
0   10     A
1   20     B
2   50     C
df3:
   id  age
0   3   30
1   4   40
df1_append_df2:
    id fname   age grade
0  1.0  Kate   NaN   NaN
1  2.0  John   NaN   NaN
2  5.0   Eli   NaN   NaN
0  NaN   NaN  10.0     A
1  NaN   NaN  20.0     B
2  NaN   NaN  50.0     C
df1_append_df2_df3:
    id fname   age grade
0  1.0  Kate   NaN   NaN
1  2.0  John   NaN   NaN
2  5.0   Eli   NaN   NaN
3  NaN   NaN  10.0     A
4  NaN   NaN  20.0     B
5  NaN   NaN  50.0     C
6  3.0   NaN  30.0   NaN
7  4.0   NaN  40.0   NaN

追加 Series

拼接 Series 一定要加上参数 ignore_index=True
在这里插入图片描述
Series 的 index 会分别对应列名
在这里插入图片描述
代码:

import pandas as pd

idnumber = [1,2,5]
fname = ['Kate','John','Eli']

df1 = pd.DataFrame({'id':idnumber,'fname':fname})
s1 = pd.Series(["aa", "bb"], index=["a", "b"])
s2 = pd.Series(["110", "Supermen"], index=["id", "fname"])

print("df1:\n{}".format(df1))
print("s1:\n{}".format(s1))
print("s2:\n{}".format(s2))

df1_appened_s1 = df1.append(s1, ignore_index=True)
df1_appened_s2 = df1.append(s2, ignore_index=True)

print("df1_appened_s1:\n{}".format(df1_appened_s1))
print("df1_appened_s2:\n{}".format(df1_appened_s2))

输出:

df1:
   id fname
0   1  Kate
1   2  John
2   5   Eli
s1:
a    aa
b    bb
dtype: object
s2:
id            110
fname    Supermen
dtype: object
df1_appened_s1:
    id fname    a    b
0  1.0  Kate  NaN  NaN
1  2.0  John  NaN  NaN
2  5.0   Eli  NaN  NaN
3  NaN   NaN   aa   bb
df1_appened_s2:
    id     fname
0    1      Kate
1    2      John
2    5       Eli
3  110  Supermen

追加 dict 字典

在这里插入图片描述
在这里插入图片描述
代码:

import pandas as pd

idnumber = [1,2,5]
fname = ['Kate','John','Eli']

df1 = pd.DataFrame({'id':idnumber,'fname':fname})
dicts_1 =[{"a":"aa", "b":"bb"},{"a":"aaa", "b":"bbb"}]
dicts_2 =[{"id":"110", "fname":"Supermen"},{"id":"111", "fname":"Superwoman"}]


print("df1:\n{}".format(df1))
print("dicts_1:\n{}".format(dicts_1))
print("dicts_1:\n{}".format(dicts_1))

df1_appened_dicts_1 = df1.append(dicts_1)
df1_appened_dicts_2 = df1.append(dicts_2, ignore_index=True)

print("df1_appened_dicts_1:\n{}".format(df1_appened_dicts_1))
print("df1_appened_dicts_2:\n{}".format(df1_appened_dicts_2))

输出:

df1:
   id fname
0   1  Kate
1   2  John
2   5   Eli
dicts_1:
[{'a': 'aa', 'b': 'bb'}, {'a': 'aaa', 'b': 'bbb'}]
dicts_1:
[{'a': 'aa', 'b': 'bb'}, {'a': 'aaa', 'b': 'bbb'}]
df1_appened_dicts_1:
    id fname    a    b
0  1.0  Kate  NaN  NaN
1  2.0  John  NaN  NaN
2  5.0   Eli  NaN  NaN
0  NaN   NaN   aa   bb
1  NaN   NaN  aaa  bbb
df1_appened_dicts_2:
    id       fname
0    1        Kate
1    2        John
2    5         Eli
3  110    Supermen
4  111  Superwoman
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值