翼度科技»论坛 编程开发 python 查看内容

【pandas基础】--数据拆分与合并

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
数据集拆分是将一个大型的数据集拆分为多个较小的数据集,可以让数据更加清晰易懂,也方便对单个数据集进行分析和处理。
同时,分开的数据集也可以分别应用不同的数据分析方法进行处理,更加高效和专业。
数据集合并则是将多个数据集合并成一个大的数据集,可以提供更全面的信息,也可以进行更综合的数据分析。
同时,数据集合并也可以减少数据处理的复杂度和时效性,提升数据分析的准确性和结果的可靠性。
1. 数据集拆分

拆分数据集比较简单,之前介绍过数据检索的各种方式,其实检索出的结果就是拆分出来的数据。
1.1 拆分行

拆分单行和多行。
  1. import pandas as pd
  2. df = pd.DataFrame(
  3.     {
  4.         "name": ["小红", "小明", "小华"],
  5.         "age": [13, 15, 14],
  6.         "gender": ["男", "女", "男"],
  7.     }
  8. )
  9. first_row = df.loc[0:0, :]
  10. left_rows = df.loc[1:, :]
复制代码

1.2 拆分列

拆分单列或者多列。
  1. import pandas as pd
  2. df = pd.DataFrame(
  3.     {
  4.         "name": ["小红", "小明", "小华"],
  5.         "age": [13, 15, 14],
  6.         "gender": ["男", "女", "男"],
  7.     }
  8. )
  9. first_col = df[["name"]]
  10. left_cols = df[["age", "gender"]]
复制代码

1.3 按条件拆分

下面的示例按照列的值来拆分数据集。
  1. import pandas as pd
  2. df = pd.DataFrame(
  3.     {
  4.         "name": ["小红", "小明", "小华"],
  5.         "age": [13, 15, 14],
  6.         "gender": ["男", "女", "男"],
  7.     }
  8. )
  9. males = df[df["gender"] == "男"]
  10. greater13 = df[df["age"] > 13]
复制代码

如果有多个条件,可以通过逻辑与(&)逻辑或(|)符号来连接,具体可以参照之前介绍数据检索的文章。
2. 数据集合并

数据集的合并也是比较常用的,因为我们收集来的数据可能来自不同的地方。
2.1 merge 方法

merge方法合并DataFrame时,有两个重要的参数:

  • how:设置合并的方式,有inner,outer,left,right四种方式。
  • on:依据那个列来合并
下面是四种不同合并方式的示例。
inner合并:name值相同的数据才保留下来。
  1. import pandas as pd
  2. df1 = pd.DataFrame(
  3.     {
  4.         "name": ["小红", "小明"],
  5.         "age": [13, 15],
  6.         "gender": ["男", "女"],
  7.     }
  8. )
  9. df2 = pd.DataFrame(
  10.     {
  11.         "name": ["小红", "小华"],
  12.         "score": [99, 100],
  13.     }
  14. )
  15. df = pd.merge(df1, df2, how="inner", on="name")
  16. df
复制代码

outer合并:两个DataFrame的name都保留下来,合并后缺失值的填充NaN。
  1. df = pd.merge(df1, df2, how="outer", on="name")
  2. df
复制代码

left合并:df1的name全部保留下来,缺失的值填充NaN。
  1. df = pd.merge(df1, df2, how="left", on="name")
  2. df
复制代码

right合并:df2的name全部保留下来,缺失的值填充NaN。
  1. df = pd.merge(df1, df2, how="right", on="name")
  2. df
复制代码

2.2 concat 方法

两个DataFrame结构相同时,一般是按行来合并(axis=0)。
  1. df1 = pd.DataFrame(
  2.     {
  3.         "name": ["小红", "小明"],
  4.         "age": [13, 15],
  5.         "gender": ["男", "女"],
  6.     }
  7. )
  8. df2 = pd.DataFrame(
  9.     {
  10.         "name": ["小红", "小华"],
  11.         "age": [13, 15],
  12.         "gender": ["男", "女"],
  13.     }
  14. )
  15. df = pd.concat([df1, df3], axis=0)
  16. df
复制代码

如果两个DataFrame结构不一样时,用列合并(axis=1)。
  1. df1 = pd.DataFrame(
  2.     {
  3.         "name": ["小红", "小明"],
  4.         "age": [13, 15],
  5.         "gender": ["男", "女"],
  6.     }
  7. )
  8. df2 = pd.DataFrame(
  9.     {
  10.         "score": [100, 90],
  11.         "city": ["nanjing", "beijing"],
  12.     }
  13. )
  14. df = pd.concat([df1, df3], axis=1)
  15. df
复制代码

2.3 join 方法

join方法和merge方法类似,主要区别在于join是DataFrame的方法,而merge是pandas的方法。
下面请直接看与merge方法相似的四种示例。
inner合并:name值相同的数据才保留下来。
  1. df1 = pd.DataFrame(
  2.     {
  3.         "name": ["小红", "小明"],
  4.         "age": [13, 15],
  5.         "gender": ["男", "女"],
  6.     }
  7. )
  8. df2 = pd.DataFrame(
  9.     {
  10.         "name": ["小红", "小华"],
  11.         "score": [99, 100],
  12.     }
  13. )
  14. df1 = df1.set_index("name")
  15. df2 = df2.set_index("name")
  16. df = df1.join(df2, how="inner")
  17. df.reset_index()
复制代码

注意,这里显示了join和merge的一个区别,join默认是依据索引(index)来合并DataFrame的,
所以,先把name设置为索引之后才合并的,合并之后又通过reset_index重置了索引,得到了和merge同样的结果。
outer合并:两个DataFrame的name都保留下来,合并后缺失值的填充NaN。
  1. df1 = df1.set_index("name")
  2. df2 = df2.set_index("name")
  3. df = df1.join(df2, how="outer")
  4. df.reset_index()
复制代码

注意,最后的数据虽然和merge一样,但是顺序有些区别。
left合并:df1的name全部保留下来,缺失的值填充NaN。
  1. df1 = df1.set_index("name")
  2. df2 = df2.set_index("name")
  3. df = df1.join(df2, how="left")
  4. df.reset_index()
复制代码

left的结果和merge一样。
right合并:df2的name全部保留下来,缺失的值填充NaN。
  1. df1 = df1.set_index("name")
  2. df2 = df2.set_index("name")
  3. df = df1.join(df2, how="right")
  4. df.reset_index()
复制代码

right的结果和merge一样。
3. 总结回顾

总的来说,pandas数据集拆分和合并的意义在于高效利用数据,提高数据分析的质量和效率,进一步实现数据驱动的业务增长。
本篇主要介绍了数据集拆分和合并最常用的几种基本方法,根据具体的业务组合这些基本方法,就能够进行更复杂的数据集拆分和合并。

来源:https://www.cnblogs.com/wang_yb/p/17411638.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具