Python数据分析_Pandas_数据组合和缺失值处理_4

今日内容大纲
  • 数据组合
    • concat
    • merge
    • join(了解)
  • 缺失值处理
  • apply方法详解

在这里插入图片描述

1.DataFrame数据组合-concat连接
  1. 简单来说,DataFrame的concat连接就像是数据的“拼图游戏”,它允许我们将多个数据集沿着一条轴线无缝拼接,形成一个更完整的数据版图。

  2. 具体而言,concat函数在Pandas库中扮演着数据整合者的角色。无论是沿着行(axis=0)还是列(axis=1)进行拼接,它都能将不同DataFrame中的数据按照指定的轴线对齐合并。在实际操作中,我们可以通过设置参数如ignore_index来重置索引,或者使用keys参数为原始数据集添加标识,以便于后续的数据分析和处理。

  3. 总之,concat连接是数据预处理中的一把利器,它能够帮助我们在数据清洗、特征工程等环节中,灵活地整合来自不同源头的数据,为构建更加精准的模型打下坚实的基础。

  • 概述
  • 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来

  • 把计算的结果追加到现有数据集,也可以使用连接

  • df对象与df对象拼接

    行拼接参考: 列名, 列拼接参考: 行号

    import pandas as pd
    
    
    # 1. 加载数据
    df1 = pd.read_csv('data/concat_1.csv')
    df2 = pd.read_csv('data/concat_2.csv')
    df3 = pd.read_csv('data/concat_3.csv')
    
    # 2. 查看数据
    df1
    df2
    df3
    
    # 3. 通过concat()函数, 拼接上述的3个df对象.
    row_concat = pd.concat([df1, df2, df3])                 # 默认是纵向拼接(行拼接), 结果为: 12行4列
    row_concat = pd.concat([df1, df2, df3], axis='rows')    # 效果同上
    row_concat = pd.concat([df1, df2, df3], axis=0)         # 效果同上, 0: 表示行, 1表示列. 
    
    row_concat = pd.concat([df1, df2, df3], axis='columns') # 按列拼接,  4行12列
    row_concat = pd.concat([df1, df2, df3], axis=1)         # 效果同上, 0: 表示行, 1表示列. 
    row_concat
    
    # 通过设置 ignore_case参数, 可以实现: 重置索引
    # 行拼接, 重置索引, 结果为: 行索引变为 0 ~ n
    pd.concat([df1, df2, df3], ignore_index=True)	
    
    # 列拼接, 重置索引, 结果为: 列名变为 0 ~ n
    pd.concat([df1, df2, df3], axis='columns', ignore_index=True)	# 
    

在这里插入图片描述

  • 测试df按行拼接时, 参考: 列名

    # 5. 自定义df对象, 设置列名, 然后拼接, 并观察结果.
    df4 = pd.DataFrame(['n1', 'n2', 'n3'])
    df4.columns = ['B']      # 加和不加该行, 观察效果.
    
    pd.concat([df1, df4], axis=0)   # 按行拼接, axis=0 可省略不写.
    

    在这里插入图片描述

  • df对象和Series对象拼接

    # 6. 使用concat连接 df 和 Series
    new_series = pd.Series(['n1', 'n2', 'n3', 'n4'])
    # 由于Series是列数据(没有行索引), concat()默认是添加行, 所以 它们拼接会新增一列. 缺值用NaN填充
    pd.concat([df1, new_series], axis='rows')   # 按行拼接    
    pd.concat([df1, new_series], axis=0)        # 0: 行,  1: 列
    
    pd.concat([df1, new_series], axis='columns')    # 0: 行,  1: 列
    pd.concat([df1, new_series], axis=1)            # 0: 行,  1: 列
    

在这里插入图片描述

01_jupyter实现数据的concat连接操作.py
#%%
# 导包
import  pandas as pd
#%%
# 加载数据
df1 = pd.read_csv('数据集/concat_1.csv',sep=',')
df2 = pd.read_csv('数据集/concat_2.csv',sep=',')
df3 = pd.read_csv('数据集/concat_3.csv',sep=',')
#%% md
# # concat()拼接
#%%
# concat(): 连接多个df数据集  默认 行拼接(上下拼接)
# 演示concat()连接多个df对象,默认索引重复ignore_index=False
row_concat1 = pd.concat([df1,df2,df3])
row_concat1
#%%
# 演示concat()连接多个df对象,使用ignore_index=True重置索引
row_concat2 = pd.concat([df1,df2,df3],ignore_index=True)
row_concat2
#%%
# concat(): 连接多个df数据集   指定坐标系按照列拼接(左右拼接)
# 演示concat()连接多个df对象,默认索引重复ignore_index=False
col_concat1 = pd.concat([df1,df2,df3],axis='columns')
col_concat1
#%%
# 演示concat()连接多个df对象,使用ignore_index=True重置索引
col_concat2 = pd.concat([df1,df2,df3],axis='columns',ignore_index=True)
col_concat2
#%%
# concat() 连接df对象和s对象
s1 = pd.Series(['n1','n2','n3','n4'],name='A')
# 默认行拼接, 索引没有重置
row_concat3 = pd.concat([df1,s1])
row_concat3
#%%
# 默认行拼接, 索引重置ignore_index=True
row_concat4 = pd.concat([df1,s1],ignore_index=True)
row_concat4
#%%
# axis=1或者axis='columns'修改成列拼接,索引没有重置
col_concat3 = pd.concat([df1,s1],axis='columns')
col_concat3
#%%
# axis=1或者axis='columns'修改成列拼接,索引重置ignore_index=True
col_concat4 = pd.concat([df1,s1],axis='columns',ignore_index=True)
col_concat4
#%%
# 特殊情况: df对象和s对象行拼接的时候,太多Nan值,且不是我想要的行拼接效果
# 想要的效果是,一维数组想直接拼接到df后面,先把一维数组转为二维数组df,再拼接
df_temp = pd.DataFrame([['a4','b4','c4','d4']],columns=['A','B','C','D'])
pd.concat([df1,df_temp])
#%%
# 假设s对象已经存在了,现在就想直接上下对应拼接到df后面
s2 = pd.Series(['a4','b4','c4','d4'])
s2_df1 = pd.DataFrame([s2.tolist()],columns=['A','B','C','D'])
pd.concat([df1,df2])
#%%
# 假设s对象已经存在了,现在就想直接上下对应拼接到df后面
s2 = pd.Series(['a4','b4','c4','d4'])
s2_df2 = s2.to_frame().T
s2_df2.columns=['A','B','C','D']
pd.concat([df1,df2])
#%% md
# # append()拼接
#%%
# append():功能是追加df所有行,默认索引重复ignore_index=False
df1.append(df2)
#%%
# append():功能是追加df所有行,索引重置ignore_index=True
df1.append(df2,ignore_index=True)
#%%
# append():追加字典,必须添加索引重置!!!
my_dict = {
  
  'A':'n1','B':'n2','C':'n3','D':'n4'}
df1.append(my_dict,ignore_index=True)
#%% md
# # 追加一列
#%%
# 追加一列方式1 : 直接追加数值
df1['测试'] = 666
df1
#%%
# 追加一列方式2: 追加s对象
# 注意: 如果 列名重复,会覆盖之前的列内容
s3 = pd.Series(['n1','n2','n3','n4'])
df1['测试'] = s3
df1
连接多个数据集&拼接_GIF

1
在这里插入图片描述
2
在这里插入图片描述
3
在这里插入图片描述
4
在这里插入图片描述
5
在这里插入图片描述

2.DataFrame数据组合-添加行和列
  • 如果想将[‘n1’,‘n2’,‘n3’,‘n4’]作为行连接到df1后,可以创建DataFrame并指定列名.

    # 传入二维数组, 即: 1行4列数据.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十六ᵛᵃᵉ

停船靠岸_愿君通关

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

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

打赏作者

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

抵扣说明:

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

余额充值