【问题标题】:Finding a match in two files and merging the data在两个文件中查找匹配项并合并数据
【发布时间】:2021-12-26 14:22:09
【问题描述】:

输入:file1

0        1             
EXE    sldk  
EXE1   vkrk
TPO    dlfk
EXE2   sdfs

输入:file2

0               1
DD=CMD     asldkjfalsdkfj
DD=EXE     mbnwjnjcxjic
DD=DMFF    pklckwkflkdf
DD=EXE2    okvwokmvfv
DD=EXE1    ksdjfokwoekc

预期输出:file1#

0       1         2    
EXE    sldk     mbnwjnjcxjic
EXE1   vkrk     ksdjfokwoekc
TPO    dlfk     NaN
EXE2   sdfs     okvwokmvfv

结果:file1#

0       1         2    
EXE    "sldk"     "mbnwjnjcxjic"
EXE    "sldk"     "ksdjfokwoekc"
EXE    "sldk"     "okvwokmvfv"
EXE1   "vkrk"     "ksdjfokwoekc"
TPO    "dlfk"     "NaN"
EXE2   "sdfs"     "okvwokmvfv"

代码

import pandas as pd
import numpy as np

with open(file1, 'r') as file1, open(file2, 'r') as file1:
    lines_1 = file1.readlines()
    lines_2 = file2.readlines()
    lines_1_column = [x.split(',') for x in lines_1]
    lines_2_column = [y.split(',') for y in lines_2]

df_file1 = pd.DataFrame(lines_1_column)
df_file2 = pd.DataFrame(lines_2_column)

extract_from_two_files = file2[0].str.extract(f'({"|".join(file1[0])})', expand=False)

merge_two_files = file1.merge(file2[[1]], how='left', left_on=0, right_on=extract_from_two_files)
merge_two_files.columns = np.arange(len(merge_two_files.columns))

merge_two_files.to_csv(file 1#, index=False, sep=',', header=None)

我想得到“预期的输出:file1#”,但结果就像这个代码的“结果:file1#”。很抱歉,您有什么建议吗?

【问题讨论】:

    标签: python pandas file merge extract


    【解决方案1】:

    您可以从file2 创建一个临时变量,而不使用DD=,并使用on 参数合并第一列(0) 中两个DataFrame 中的数据。

    import pandas as pd
    
    df1 = pd.read_csv('file1.csv', sep='\s+')
    df2 = pd.read_csv('file2.csv', sep='\s+')
    
    df_tmp = df2.replace('DD=','', regex=True)
    
    result = pd.merge(left=df1, right=df_tmp, on=['0'], how='left')
    result.columns = range(len(result.columns))
    print(result)
    

    结果的输出

          0     1             2
    0   EXE  sldk  mbnwjnjcxjic
    1  EXE1  vkrk  ksdjfokwoekc
    2   TPO  dlfk           NaN
    3  EXE2  sdfs    okvwokmvfv
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2016-10-19
      • 1970-01-01
      • 2019-05-10
      • 2019-06-28
      • 2017-10-25
      相关资源
      最近更新 更多