我有一个python脚本,它运行一千个csv文件并根据我指定的日期提取行并将它们放在一个新的csv中。在这种情况下,DATE等于10-15-2017。生成的csv文件看起来像附加图像。
我希望它看起来像带有列标题的正确csv。
STATION, DATE, LATITUDE, LONGITUDE, ...
USW0003013, 10-15-2017, 36.7876, -105.6434, ...
USW0003016, 10-15-2017, 37.5456, -103.5671, ...
我已经完成了一些搜索,但只找到了有关从行到列的转置的信息,但由于我在行中有字段名称,我认为这不会起作用。
以下是我用来从每个csv文件(超过一千)中提取行的代码,其中DATE是10-15-2017。
path = "C:/py-testing/downloads/*.csv"
for fname in glob.glob(path):
with open(fname, 'rb') as f:
reader = csv.DictReader(f)
rows = [
row
for row in reader
if row['DATE'] == "2017-10-15"
]
for row in rows:
with open("C:/py-testing/output.csv", "ab") as f:
writer = csv.writer(f, delimiter = ',')
writer.writerow([row])
答案 0 :(得分:2)
使用pandas
模块可以轻松完成此操作,如下所示:
import pandas as pd
path = "C:/py-testing/downloads/*.csv"
csv_all = []
for fname in glob.glob(path):
csv_all.append(pd.read_csv(fname))
df = pd.concat(csv_all)
df = df.loc[df['DATE'] == "2017-10-15"]
#Choose the columns you need
df = df[['STATION', 'DATE', 'LATITUDE', 'LONGITUDE']]
df.to_csv('./csv_merged.csv')
答案 1 :(得分:0)
如果您想添加自定义标题,只需将它们作为第二个参数传递给DictWriter
(在您的情况下,字段名称等于row.keys()
)。
以下是一个例子:
import csv
data = []
for i in range(10):
data.append({'Date': '10-15-2017', 'LATITUDE': i+30})
with open('csv_with_headers.csv', 'wb') as outcsv:
writer = csv.DictWriter(outcsv, fieldnames = ["Date", "LATITUDE"])
writer.writeheader()
writer.writerows(data)
输出:
cat csv_with_headers.csv
Date,LATITUDE
10-15-2017,30
10-15-2017,31
10-15-2017,32
10-15-2017,33
10-15-2017,34
10-15-2017,35
10-15-2017,36
10-15-2017,37
10-15-2017,38
10-15-2017,39