文章目录
今日内容大纲
- 数据组合
- concat
- merge
- join(了解)
- 缺失值处理
- apply方法详解
1.DataFrame数据组合-concat连接
简单来说,DataFrame的concat连接就像是数据的“拼图游戏”,它允许我们将多个数据集沿着一条轴线无缝拼接,形成一个更完整的数据版图。
具体而言,concat函数在Pandas库中扮演着数据整合者的角色。无论是沿着行(axis=0)还是列(axis=1)进行拼接,它都能将不同DataFrame中的数据按照指定的轴线对齐合并。在实际操作中,我们可以通过设置参数如
ignore_index
来重置索引,或者使用keys
参数为原始数据集添加标识,以便于后续的数据分析和处理。总之,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列数据.</