【问题标题】:Concatenating data from two files连接两个文件中的数据
【发布时间】:2021-12-23 18:05:14
【问题描述】:

用 Pandas 打开了 2 个文件。如果两个文件的第一列(彩色字母)中有共同部分,我想将第二个文件的第二列的数据粘贴到第一个文件的匹配部分中。如果没有匹配,我想写'NaN'。在这种情况下我有什么办法吗?

文件1

enter code here
    0    1
0  JCW  574
1  MBM  4212
2  COP  7424
3  KVI  4242
4  ECX  424

文件2

enter code here
     0      1
0  G=COP  d4ssd5vwe2e2
1  G=DDD  dfd23e1rv515j5o
2  G=FEW  cwdsuve615cdldl
3  G=JCW  io55i5i55j8rrrg5f3r
4  G=RRR  c84sdw5e5vwldk455
5  G=ECX  j4ut84mnh54t65y

文件1#

enter code here
    0    1     2
0  JCW  574   io55i5i55j8rrrg5f3r
1  MBM  4212  NaN
2  COP  7424  d4ssd5vwe2e2
3  KVI  4242  NaN
4  ECX  424   j4ut84mnh54t65y

【问题讨论】:

    标签: python pandas dataframe file matching


    【解决方案1】:

    使用 join='outer' (https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html) 查看 pandas 的 concat 函数。还有this的问题和答案可以帮助你。

    它涉及重新索引每个数据帧以使用现在称为“0”的列作为索引,然后根据它们的索引连接两个数据帧。

    另外,我可以建议您 do not paste an image 的数据框,但以其他人可以测试他们的建议的形式上传数据。

    【讨论】:

    • 我真的很感谢你。感谢您的意见和建议。
    【解决方案2】:

    Series.str.extract 用于新的Series 以匹配df1[0] 值的值,然后与DataFrame.merge 中的左连接合并:

    df1 = pd.read_csv(file1)
    df2 = pd.read_csv(file2)
    
    s = df2[0].str.extract(f'({"|".join(df1[0])})', expand=False)
    
    df = df1.merge(df2[[1]], how='left', left_on=0, right_on=s)
    df.columns = np.arange(len(df.columns))
    print (df)
         0     1                    2
    0  JCW   574  io55i5i55j8rrrg5f3r
    1  MBM  4212                  NaN
    2  COP  7424         d4ssd5vwe2e2
    3  KVI  4242                  NaN
    4  ECX   424      j4ut84mnh54t65y
    

    或者如果需要匹配列 df1[0] 的最后 3 个值,请使用:

    s = df2[0].str.extract(f'({"|".join(df1[0].str[-3:])})', expand=False)
    
    df = df1.merge(df2[[1]], how='left', left_on=0, right_on=s)
    df.columns = np.arange(len(df.columns))
    print (df)
    

    【讨论】:

    • 感谢您的评论。但是,我对您的建议有其他问题。结果 JCW,"574","io55i5i55j8rrrg5f3r"\n MBM,"4212","NaN"\n COP,"7424","d4ssd5vwe2e2"\n KVI,"4242","NaN"\n ECX,"424" ,"j4ut84mnh54t65y"\n 我在第 2、第 3 列中使用 "" 得到了这样的结果。为什么会发生这种情况以及如何删除此文件中的“”?
    • @LoganLee - 是否可以更改数据样本以查看问题?因为从 cmets 不容易找到。谢谢。
    • 我真的很感谢你。不幸的是,我不想通过与您共享原始文件来离开我的公司,因为我的老板不希望将文件导出。感谢您的考虑,希望您一切顺利。
    • @LoganLee - 我明白了。我认为将数据样本从 commnets 更改为问题,仍然是样本数据,但数据对你不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2016-11-18
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多