Pandas统计分析基础(5):DataFrame的合并(内含大量代码可供练习)

✅作者简介:大家好我是Xlong,一枚正在学习COMSOL、Python的工科研究僧
📃个人主页:  Xlong的个人博客主页
🔥系列专栏:   Python大数据分析
💖如果觉得博主的文章还不错的话,请👍支持一下博主哦🤞

在上篇文章中主要介绍了DataFrame的数据分析及画图功能。本文主要介绍DataFrame的合并。

目录

一、前言

二、DataFrame的合并

2.1 concat方法

2.1.1 concat横向合并

2.1.2 concat纵向合并

2.1.3 append方法的纵向合并

2.1.4 使用concat合并时,可以添加keys参数来区分来自哪个DataFrame

2.2 使用join函数合并表,常用于行索引相同的两个DataFrame

2.3 使用merge方法进行合并 


一、前言

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #针对坐标轴中负号显示不出来的问题
pop=pd.read_excel('GDPandPopulation.xlsx',sheet_name='Population',index_col=0)
gdp=pd.read_excel('GDPandPopulation.xlsx',sheet_name='GDP',index_col=0)
print(pop.head(),'\n') #DataFrame.head()  可以读取Dataframe的前n行,默认n=5
print(len(gdp))   #len()可以返回DtaFrame的行数

运行结果:

                2018年
省份           
北京市      2154
天津市      1560
河北省      7556
山西省      3718
内蒙古自治区   2534

31

二、DataFrame的合并

DataFrame可以保存任意维度的数据。 我们尝试将gdp和pop两个dataframe合并成一个。

2.1 concat方法

2.1.1 concat横向合并

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #针对坐标轴中负号显示不出来的问题
pop=pd.read_excel('GDPandPopulation.xlsx',sheet_name='Population',index_col=0)
gdp=pd.read_excel('GDPandPopulation.xlsx',sheet_name='GDP',index_col=0)
df=pd.concat([gdp,pop],axis=1) ##axis=0是纵向,=1是横向
print(df)

运行结果:

                2018年  2018年
  省份                       
北京市       30319.98   2154
天津市       18809.64   1560
河北省       36010.27   7556
山西省       16818.11   3718
内蒙古自治区    17289.22   2534
辽宁省       25315.35   4359
吉林省       15074.62   2704
黑龙江省      16361.62   3773
上海市       32679.87   2424
江苏省       92595.40   8051
浙江省       56197.15   5737
安徽省       30006.82   6324
福建省       35804.04   3941
江西省       21984.78   4648
山东省       76469.67  10047
河南省       48055.86   9605
湖北省       39366.55   5917
湖南省       36425.78   6899
广东省       97277.77  11346
广西壮族自治区   20352.51   4926
海南省        4832.05    934
重庆市       20363.19   3102
四川省       40678.13   8341
贵州省       14806.45   3600
云南省       17881.12   4830
西藏自治区      1477.63    344
陕西省       24438.32   3864
甘肃省        8246.07   2637
青海省        2865.23    603
宁夏回族自治区    3705.18    688
新疆维吾尔自治区  12199.08   2487

因此需要修改列名,使用DataFrame.rename()方法

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #针对坐标轴中负号显示不出来的问题
pop=pd.read_excel('GDPandPopulation.xlsx',sheet_name='Population',index_col=0)
gdp=pd.read_excel('GDPandPopulation.xlsx',sheet_name='GDP',index_col=0)
gdp.rename(columns={'2018年': 'GDP'},inplace=True)
#字典中,key为旧名字,value为新名字,key值不存在就不不改名,不会报错
print(gdp)

运行结果:

                GDP
省份                
北京市       30319.98
天津市       18809.64
河北省       36010.27
山西省       16818.11
内蒙古自治区    17289.22
辽宁省       25315.35
吉林省       15074.62
黑龙江省      16361.62
上海市       32679.87
江苏省       92595.40
浙江省       56197.15
安徽省       30006.82
福建省       35804.04
江西省       21984.78
山东省       76469.67
河南省       48055.86
湖北省       39366.55
湖南省       36425.78
广东省       97277.77
广西壮族自治区   20352.51
海南省        4832.05
重庆市       20363.19
四川省       40678.13
贵州省       14806.45
云南省       17881.12
西藏自治区      1477.63
陕西省       24438.32
甘肃省        8246.07
青海省        2865.23
宁夏回族自治区    3705.18
新疆维吾尔自治区  12199.08

 先建好改名字典再统一改

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #针对坐标轴中负号显示不出来的问题
pop=pd.read_excel('GDPandPopulation.xlsx',sheet_name='Population',index_col=0)
gdp=pd.read_excel('GDPandPopulation.xlsx',sheet_name='GDP',index_col=0)
pop_newname={'2018年': 'POP'}
pop.rename(columns=pop_newname,inplace=True)
print(pop)

运行结果:

                POP
省份             
北京市        2154
天津市        1560
河北省        7556
山西省        3718
内蒙古自治区     2534
辽宁省        4359
吉林省        2704
黑龙江省       3773
上海市        2424
江苏省        8051
浙江省        5737
安徽省        6324
福建省        3941
江西省        4648
山东省       10047
河南省        9605
湖北省        5917
湖南省        6899
广东省       11346
广西壮族自治区    4926
海南省         934
重庆市        3102
四川省        8341
贵州省        3600
云南省        4830
西藏自治区       344
陕西省        3864
甘肃省        2637
青海省         603
宁夏回族自治区     688
新疆维吾尔自治区   2487

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #针对坐标轴中负号显示不出来的问题
pop=pd.read_excel('GDPandPopulation.xlsx',sheet_name='Population',index_col=0)
gdp=pd.read_excel('GDPandPopulation.xlsx',sheet_name='GDP',index_col=0)
gdp.rename(columns={'2018年': 'GDP'},inplace=True)
pop_newname={'2018年': 'POP'}
pop.rename(columns=pop_newname,inplace=True)
df_combine=pd.concat([gdp,pop],axis=1)  #axis=1即行索引
print(df_combine)

 运行结果:

                 GDP    POP
省份                       
北京市       30319.98   2154
天津市       18809.64   1560
河北省       36010.27   7556
山西省       16818.11   3718
内蒙古自治区    17289.22   2534
辽宁省       25315.35   4359
吉林省       15074.62   2704
黑龙江省      16361.62   3773
上海市       32679.87   2424
江苏省       92595.40   8051
浙江省       56197.15   5737
安徽省       30006.82   6324
福建省       35804.04   3941
江西省       21984.78   4648
山东省       76469.67  10047
河南省       48055.86   9605
湖北省       39366.55   5917
湖南省       36425.78   6899
广东省       97277.77  11346
广西壮族自治区   20352.51   4926
海南省        4832.05    934
重庆市       20363.19   3102
四川省       40678.13   8341
贵州省       14806.45   3600
云南省       17881.12   4830
西藏自治区      1477.63    344
陕西省       24438.32   3864
甘肃省        8246.07   2637
青海省        2865.23    603
宁夏回族自治区    3705.18    688
新疆维吾尔自治区  12199.08   2487

 2.1.2 concat纵向合并

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #针对坐标轴中负号显示不出来的问题
pop=pd.read_excel('GDPandPopulation.xlsx',sheet_name='Population',index_col=0)
gdp=pd.read_excel('GDPandPopulation.xlsx',sheet_name='GDP',index_col=0)
gdp.rename(columns={'2018年': 'GDP'},inplace=True)
pop_newname={'2018年': 'POP'}
pop.rename(columns=pop_newname,inplace=True)
df_combine=pd.concat([gdp,pop],axis=1)  #axis=1即行索引
df1=df_combine[:][0:5]
df2=df_combine[:][5:]
print(df1,'\n')
print(df2)

运行结果:

                GDP   POP
省份                    
北京市     30319.98  2154
天津市     18809.64  1560
河北省     36010.27  7556
山西省     16818.11  3718
内蒙古自治区  17289.22  2534

               GDP    POP
省份                       
辽宁省       25315.35   4359
吉林省       15074

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xlong~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值