Pandas 合并数据

本文深入探讨了Pandas中的数据合并操作,包括`pd.concat`和`merge`函数的使用。详细介绍了如何处理重复索引,如何根据axis进行合并,以及如何处理不同列名的合并。还讲解了一对一、多对一、多对多的连接方式,以及join参数、on、left_on、right_on、left_index、right_index和how参数的作用。最后提到了如何自定义重复列名的后缀。
摘要由CSDN通过智能技术生成

合并数据是对数据集合的合,是基本操作之⼀,也是我们处理大量数据的核⼼操作,本章主要研究数据的合并操作。

# 准备数据
import numpy as np
import pandas as pd


def make_df(cols, ind):
 '''⽣成⼀个简单的DataFrame数据'''
 data = {
   c:[str(c) + str(i) for i in ind] for c in cols}

 return pd.DataFrame(data, ind)
# 测试函数
df = make_df("ABC", range(5))
print(df)
  A  B  C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4

concat

通过pandas的concat能实现简单的数据合并。

pd.concat实现简单的Series和DataFrame的合并

# 简单的合并
s1 = pd.Series(list("ABC"), index =[1, 2, 3])
s2 = pd.Series(list("DEF"), index =[4, 5, 6])
s = pd.concat([s1, s2])
print("合并后: \n", s)
合并后:
 1 A
2 B
3 C
4 D
5 E
6 F
dtype: object

DF合并

df1 = make_df("ABC", [1, 2, 3])
df2 = make_df("DEF", [4, 5, 6])
print("df1 = \n", df1)
print("\n df2 = \n", df2)
df1 =
 A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
 df2 =
 D E F
4 D4 E4 F4
5 D5 E5 F5
6 D6 E6 F6

对两个df进行合并

df3 = pd.concat([df1, df2])
print("\n df3 = \n", df3)
 df3 =
 A B C D E F
1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN
4 NaN NaN NaN D4 E4 F4
5 NaN NaN NaN D5 E5 F5
6 NaN NaN NaN D6 E6 F6

FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.
To accept the future behavior, pass 'sort=False'.
To retain the current behavior and silence the warning, pass 'sort=True'.

对于这种排序,因为非级联轴不对齐的情况,我们也会获得相应的警告

合并的时候同样可以指定axis
df4 = pd.concat([df1, df2], axis=1)
print("\n df4 = \n", df4)
 df4 =
 A B C D E F
1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN
4 NaN NaN NaN D4 E4 F4
5 NaN NaN NaN D5 E5 F5
6 NaN NaN NaN D6 E6 F6

重复索引的处理

重复索引在合并过程中是默认保留的,DataFrame也允许重复索引值的出现,但会熬成混淆,我们对重复索引的处理主要包括:

  • 捕捉异常, 需要设置参数 verify_integrity
  • 或略,需要设置参数 ignore_index
  • 增加多级索引, 需要设置参数 keys
# 准备数据
df1 = make_df("AB", [0,1])
df2 = make_df
### 回答1: Pandas合并数据集是指将两个或多个数据集按照一定的规则合并成一个新的数据集。常用的合并方式有concat、merge和join。其中,concat是将两个数据集按照行或列方向拼接在一起,merge是根据某一列或多列的值将两个数据合并成一个,join是根据两个数据集的索引值将它们合并成一个。Pandas合并数据集是数据分析中常用的操作之一,可以帮助我们更好地理解数据,发现数据之间的关系。 ### 回答2: pandas是一个强大的数据分析库,能够方便地进行数据处理和分析。在数据分析中,数据集往往需要进行合并,这时我们就可以用pandas进行数据集的合并pandas数据集的合并可以分为三种方式: 1. 按列合并: 将两个数据集按照列的方向进行合并,可以使用pandas的concat函数。具体步骤如下: 1)通过pd.concat函数对两个数据集进行合并; 2)使用axis参数指定合并方向,默认为0,即按照行的方向合并; 3)可以设置ignore_index参数为True来重新生成索引。 2. 按行合并: 将两个数据集按照行的方向进行合并,可以使用pandas的merge函数。具体步骤如下: 1)通过pd.merge函数对两个数据集进行合并; 2)可以使用on参数指定列名来指定进行合并的列; 3)可以使用how参数指定合并的方式,默认为'inner',即两个数据集共有的行。 3. 按指定条件合并: 将两个数据集按照指定条件进行合并,可以使用pandas的merge函数。具体步骤如下: 1)通过pd.merge函数对两个数据集进行合并; 2)可以使用left_on、right_on参数指定左、右数据集进行合并的列名; 3)可以使用how参数指定合并的方式,默认为'inner',即两个数据集共有的行。 以上是pandas合并数据集的三种方式,不同的方式可以根据具体情况进行选择。其中,按指定条件合并是最灵活的方式,可以根据需要进行复杂合并。 在使用pandas合并数据集时,需要注意数据集的格式相同,并且数据字段的名称相同或能够唯一对应。同时,还需要注意是否存在重复的数据,如果存在需要进行去重操作。 ### 回答3: Pandas是一个用于数据分析的Python库,其中的DataFrame是数据处理的重要工具之一。在实际的应用中,我们常常需要将多个数据集进行合并Pandas的merge方法可以方便地完成这个操作。 Pandas的merge方法可以根据指定的key将两个DataFrame中的行连接在一起。key是DataFrame中一个或多个列的名称,这些列的值都是唯一的,用于将行匹配。比如,我们有一个包含学生信息的DataFrame和一个包含课程信息的DataFrame,它们都有一个名为“学号”的列可以用于匹配。那么我们可以使用merge方法将它们连接在一起,这样我们就可以得到一个包含学生和课程信息的完整数据集。 merge方法的语法如下: ``` pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None) ``` 其中,left和right是需要合并的DataFrame;how表示合并的方式(inner、outer、left或right);on表示需要连接的列名;left_on和right_on表示需要连接的左右两个DataFrame中不同的列名;left_index和right_index表示是否使用行索引连接;sort表示是否对结果DataFrame按连接列进行排序;suffixes表示重名的列需要加上的后缀。 比如,我们可以这样合并学生信息和课程信息: ``` import pandas as pd # 创建学生信息DataFrame student_df = pd.DataFrame({ '学号': ['s1', 's2', 's3', 's4'], '姓名': ['张三', '李四', '王五', '赵六'], '性别': ['男', '女', '男', '女'] }) # 创建课程信息DataFrame course_df = pd.DataFrame({ '学号': ['s1', 's2', 's3', 's4'], '课程名称': ['数学', '物理', '化学', '英语'], '成绩': [90, 80, 85, 95] }) # 将两个DataFrame合并 result_df = pd.merge(student_df, course_df, on='学号') print(result_df) ``` 运行结果如下: ``` 学号 姓名 性别 课程名称 成绩 0 s1 张三 男 数学 90 1 s2 李四 女 物理 80 2 s3 王五 男 化学 85 3 s4 赵六 女 英语 95 ``` 可以看到,result_df中包含了学生信息和课程信息,行数和列数与student_df相同,只是新增了“课程名称”和“成绩”两列。在合并DataFrame时,Pandas会默认对连接列进行交集操作,即只保留两个DataFrame中都存在的行。如果想要保留所有行,可以使用outer方式合并。如果想要保留左边DataFrame中的所有行,可以使用left方式合并;反之,如果想要保留右边DataFrame中的所有行,可以使用right方式合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值