如何从许多csv文件中提取特定数据并放入python

时间:2017-06-23 21:56:16

标签: python csv

我有一个包含大约3000或4000个csv文件的目录,所有文件都具有相同的基本格式(为简单起见,改为简单的数字和标题):

A,B,C,D,E,F,G,H,I,J     # header
1,2,3,4,5,6,7,8,9,0     # let's call this line X
0,1,2,3,4,5,6,7,8,9     # let's call this line Y

我想创建一个包含所有原始信息的主csv文件,标题遵循以下格式:filename,XI,YB,XB,YB-XB

要继续上一个示例,这就是新csv文件的标题和第一行理想情况:

filename,XI,YB,XB,YB-XB
File1,9,1,2,-1
File2,...

...依此类推,创建一个主csv文件,该文件包含目录中每个原始csv的相同特定信息。

我是python的新手,并尝试编写一个代码来为我做这个,但这比我之前的少量练习更复杂。任何帮助解释如何执行此操作或代码示例将不胜感激。

谢谢,艾琳

编辑: 在网上查看我是否能找到这个问题的答案之后,我能够将大部分工作代码拼凑在一起,完成我想要的工作,尽管我仍然无法访问具体的数字在原始的csv文件中。这是我到目前为止所提出的:

import glob
import os

outfile = open('path/output.csv', 'w') 
outfile.write('filename,XI,YB,XB,YB-XB\n') 
for filename in glob.glob('path/*.csv'): 
    if filename == 'output.csv':
        continue     # to skip this file 
    with open(filename, 'r') as infile: 
        count = 0
        lineno = 0 
        for lineno == 1: 
            continue     # skips header
        fields = line.split(',') 
        a =     # Here goes the code to access XI
        b =     # Here goes the code to access YB 
        c =     # Here goes the code to access XB
        d = b - c 
        outfile.write('%s,%g,%g,%g,%g\n' % (filename, a, b, c, d)) 
        count += 1
    if count == 0:     # in case of empty files
        outfile.write('%s,0,0,0,0\n' % filename) 
        print '%s is empty!' % filename
outfile.close() 

1 个答案:

答案 0 :(得分:1)

如果所有文件具有相同的列名

,则可以通过以下方式使用pandas完成
import pandas as pd
import glob

df_all = pd.DataFrame(columns =['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'] )

for filename in glob.glob('path\*.csv'): 
    df = pd.read_csv(filename,usecols = ['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'])
    df_all = pd.concat([df,df_all],axis=0)

df_all.to_csv(mergedfilename)