根据文件名将csv文件放入单独的pandas数据帧中

时间:2018-11-02 11:54:34

标签: python pandas csv dataframe concat

我有一个包含文件名的列表。我想解析目录并从列表中的每个元素开始读取所有文件,并将其存储在数据框中

例如:

list1=[abc,bcd,def]

目录:

abc1.txt   
abc2.txt
abc3.txt

bcd1.txt
bcd2.txt
bcd3.txt

输出应该是这样,以'abc'开头的文件应该在一个pandas数据框中,而以'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)

2 个答案:

答案 0 :(得分:-1)

这将创建一个DataFrames的字典,其中每个DataFrame都包含与“表达式”的前三个字母匹配的所有文件(即abcdef等。 C。)。字典中的键是相同的三个字母:

# Some dummy data
filenames = ['abcdefghijkl.txt', 'abcdef.txt',  'defghijk.txt']

# List of combination of certain letters 
exps = ['abc', 'def', 'ghi', 'jkl']

dataframes = {} 
for filename in filenames:
    _df = pd.read_csv(filename)

    key = exps[exps.index(filename[:3])]

    try: 
        dataframes[key] = pd.concat([dataframes[key], _df], ignore_index=True)
    except KeyError:
        dataframes[key] = _df



print(dataframes['abc'])

    a   b   c
0   7   8   9
1  10  11  12
2   1   2   3
3   4   5   6

print(dataframes['def'])
    a   b   c
0   7   8   9
1  10  11  12

以上文件的内容为:

abcdefghijkl.txt

a,b,c
7,8,9
10,11,12

abcdef.txt

a,b,c
1,2,3
4,5,6

defghijkl.txt

a,b,c
7,8,9
10,11,12

答案 1 :(得分:-1)

我假设您有一个目录,除了您要阅读的文件之外,还有其他几个文件。

import os
import pandas as pd

dfs = { }

for f in os.listdir(dirname):
   for k in list1:
       if f.startswith(k):
          try:
             dfs[k].concat(pd.read_csv(dirname+f, sep=',', header=None))
          except KeyError:
             dfs[k] = pd.read_csv(dirname+f, sep=',', header=None))