将名称相似的文件合并到一个数据框中

时间:2018-11-02 14:23:13

标签: python pandas dataframe

我有一个存储在目录中的文件列表,例如

filenames=[
        abc_1.txt
        abc_2.txt
        abc_3.txt

        bcd_1.txt
        bcd_2.txt
        bcd_3.txt
       ]

pattern=[abc]

我想将多个txt文件读入一个数据帧,以便所有以abc开头的文件都在一个数据帧中,然后所有文件名都以bcd等开头。

我的代码:

filenames = os.listdir(file_path)
expnames=[]
for files in filenames:
     expnames.append(files.rsplit('_',1)[0])

##   expnames=[abc, bcd]

 dfs = []
 for exp in expnames:
      for files in filenames:
          if files.startswith(exp):
               dfs.append(pd.read_csv(file_path+files,sep=',',header=None))
  big_frame = pd.concat(dfs, ignore_index=True)

由于多个for循环,我的输出包含重复的行

输出: enter image description here

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

这会将您所需的输出存储在称为list_of_dfs的数据帧列表中,然后从中创建一个MultiIndex数据帧final,并以文件前缀(例如['abc','bcd'])作为关键字的键。最外面的索引级别:

import pandas as pd
import os

filenames = os.listdir(file_path)

prefixes = list(set(i.split('_')[0] for i in filenames))

list_of_dfs = [pd.concat([pd.read_csv(os.path.join(file_path, file), header=None) for file in filenames if file.startswith(prefix)], ignore_index=True) for prefix in prefixes]

final = pd.concat(list_of_dfs, keys=prefixes)

答案 1 :(得分:0)

file_path = '/home/iolie/Downloads/test/'
filenames = os.listdir(file_path)
prefixes = list(set(i.split('_')[0] for i in filenames))


for prefix in prefixes:
    for file in filenames: 
        if file.startswith(prefix):
            list_of_dfs= [ pd.concat( [pd.read_csv (os.path.join(file_path, file)], header=None ),ignore_index=True)]
            final=pd.concat(list_of_dfs)