merge函数将两个csv按名称索引关键字拼接

      当打算将两个csv数据表拼接在一起,一开始是想通过两个csv数据表的第一列的名称,进行遍历匹配再重新生成一个新的csv文件,但整个过程显得繁重,所以参考了两篇CSDN文章《大量csv数据合并》icon-default.png?t=M85Bhttps://blog.csdn.net/angela_jin/article/details/105836786?ops_request_misc=&request_id=&biz_id=102&utm_term=csv%E6%A3%80%E7%B4%A2%E6%8B%BC%E6%8E%A5%E5%90%88%E5%B9%B6&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-105836786.142^v56^new_blog_pos_by_title,201^v3^add_ask&spm=1018.2226.3001.4187      后来得知pandas中的merge函数用法简直就是csv数据横向合并的神器,在文章中Python pd.merge函数通过索引横向合并csv文件icon-default.png?t=M85Bhttps://blog.csdn.net/soderayer/article/details/124400998?ops_request_misc=&request_id=&biz_id=102&utm_term=csv%E6%A3%80%E7%B4%A2%E6%8B%BC%E6%8E%A5merge&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-124400998.142^v56^new_blog_pos_by_title,201^v3^add_ask&spm=1018.2226.3001.4187

介绍了merge详细用法

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

参数如下:

    left: 拼接的左侧DataFrame对象
    right: 拼接的右侧DataFrame对象
    on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
    left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
    right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
    left_index: 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
    right_index: 与left_index功能相似。
    how: One of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。
    sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
    suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
    copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
    indicator:将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。
 

最简单的用法:

(1)导入需要拼接的csv文档路径,如下图的 left_csv和right_csv

(2)使用pandas的read_csv()读取csv文档中的数据

(3)使用pandas的merge进行拼接

import pandas as pd
left_csv = "D:\\Add_gender\\GLCM_concat\\ep20_feature.csv"
left = pd.read_csv(left_csv)
right_csv = "D:\\Add_gender\\GLCM_concat\\train_glcm_feature.csv"
right = pd.read_csv(right_csv)

pk=pd.merge(left,right,left_on='image_name', right_on='image_name')

print(pk)
pk.to_csv("D:\\Add_gender\\GLCM_concat\\csv_concat.csv")

需要注意的点:

1、我本来生成csv数据表是没有“image_name”的,是在已经生成csv数据,后期手动添加的,如果需要拼接的话,而且前期并没有key(image_name)的 , 请自行添加。

merge函数将两个csv按名称索引关键字拼接_第1张图片

 merge函数将两个csv按名称索引关键字拼接_第2张图片

拼接后的数据图如下:

merge函数将两个csv按名称索引关键字拼接_第3张图片

2、我上面大可不必使用left_on=和right_on=,我只需要使用on=key就行,我仅仅是为了熟悉一下这个merge的用法

 

你可能感兴趣的:(数据处理,pandas,python,数据分析)