我有一个包含大约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()
答案 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)