第4章 使用Pandas进行数据预处理之4.1 合并数据

第4章 使用Pandas进行数据预处理之4.1 合并数据

庞立智
2023-10-23 / 0 评论 / 197 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年10月23日,已超过457天没有更新,若内容或图片失效,请留言反馈。

代码 4-1 行索引完全相同时的横向堆叠# 书 P-95页

import pandas as pd
#先读取数据,注意文件地址斜线方向为/。
user_all_info = pd.read_csv('../data/user_all_info.csv')
df1 = user_all_info.iloc[:, :3]  # 取出user_all_info的前3列数据,:3为0到2
df2 = user_all_info.iloc[:, 3:]  # 取出user_all_info的第4列到最后1列数据
print('合并df1的大小为%s,df2的大小为%s' % (df1.shape, df2.shape))
print('外连接合并后的数据框大小为:', pd.concat([df1, df2], axis=1,
                                 join='outer').shape) 
print('内连接合并后的数据框大小为:', pd.concat([df1, df2], axis=1,
                                  join='inner').shape)

代码 4-2 列名相同的纵向堆叠

# 取出user_all_info前500行数据
df3 = user_all_info.iloc[:500, :] 
# 取出user_all_info的500后的数据
df4 = user_all_info.iloc[500:, :] 
print('合并df3的大小为%s,df4的大小为%s' % (df3.shape, df4.shape))
print('内连接纵向合并后的数据框大小为:', pd.concat([df3, df4],
       axis=0, join='outer').shape) 
print('外连接纵向合并后的数据框大小为:', pd.concat([df3, df4],
       axis=0, join='inner').shape)

代码 4-3 使用append方法进行堆叠

print('堆叠前df3的大小为%s,df4的大小为%s' % (df3.shape, df4.shape))
print('append纵向堆叠后的数据框大小为:', df3.append(df4).shape)

代码 4-4 使用merge方法合并数据表

pay_info = pd.read_csv('../data/user_pay_info.csv', encoding='gbk')
download_info = pd.read_csv('../data/user_download.csv', encoding='gbk')
# 用户信息表和用户每月支出信息表中都有'用户编号'
download_and_pay = pd.merge(download_info, pay_info, 
                            left_on='用户编号', right_on='编号')
print('pay_info用户每月支出信息表的原始形状为:', pay_info.shape)
print('download_info用户下载意愿表的原始形状为:', 
      download_info.shape)
print('用户下载意愿表和用户每月支出信息表主键合并后的形状为:', 
      download_and_pay.shape)

代码 4-5 使用jion()方法实现主键合并

pay_info.rename({'编号': '用户编号'}, inplace=True)
download_and_pay1 = download_info.join(pay_info, on='用户编号', 
                                       rsuffix='1')
print('用户下载意愿表和用户每月支出信息表主键合并后的形状为:',
      download_and_pay1.shape)

代码 4-6 使用combine_first()方法进行重叠合并

import numpy as np
#建立两个字典,除了ID外,别的特征互补
dict1 = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9],
         'System': ['win10', 'win10', np.nan, 'win10',
                np.nan, np.nan, 'win7', 'win7', 'win8'], 
      'cpu': ['i7', 'i5', np.nan, 'i7', np.nan, np.nan, 
             'i5', 'i5', 'i3']}
dict2 = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9], 
         'System': [np.nan, np.nan, 'win7', np.nan, 
                'win8', 'win7', np.nan, np.nan, np.nan], 
        'cpu': [np.nan, np.nan, 'i3', np.nan, 'i7', 
                'i5', np.nan, np.nan, np.nan]}
#变换两个字典为DataFrame
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
print('经过重叠合并后的数据为:\n', df1.combine_first(df2))
7

评论 (0)

取消