[英]Problems reading and concatenating CSV files into a single dataframe
[英]Concatenating multiple CSV files into a Dataframe and outputing to Master CSV
我正在尋找可以幫助我完成以下腳本的人。 我正在嘗試將一個月的 csv 文件連接到一個“主文件”中。 這些文件真的很大,所以我希望在腳本中做一些事情來縮短它們。 這是我遇到的問題:
到目前為止,這是我的腳本,我使用文件的時間戳找到正確的月份 '201510' = 十月
import csv
import os
import sys
import pandas as pd
Source = r'F:\backup\finalized 2'
Output = r'F:\Tom\Python'
for root, dirs, files in os.walk((os.path.normpath(Source)), topdown=False):
for name in files:
if name.startswith('201510') and name.endswith('client.csv'):
print "Found", name
SourceFolder = os.path.join(root, name)
with open(SourceFolder + "", 'r') as f:
next(f)
for line in csv.reader(f, delimiter=','):
with open('output1.csv','ab') as fout:
wr = csv.writer(fout)
wr.writerow(line)
以下是我想添加到數據框/CSV 末尾的計算:
df['ten_avg'] = df.iloc[:, 30:50].sum(axis=1).astype('int64') / 20
df['twenty_avg'] = df.iloc[:, 30:70].sum(axis=1).astype('int64') / 40
我認為您只能使用熊貓進行處理。
您需要所有文件的標題,因為您需要通過 csvs 的標題將它們連接到一個大文件。
我認為最好將輸出文件的路徑和名稱一起定義: OutputCSV = r'F:\Tom\Python\output.csv'
。
讀取csv
的最佳方法是只讀取這些列,這正是下一步處理所需要的。 您可以使用帶有參數usecol 的函數 read_csv 。 它是列的過濾器,需要列的名稱。 您可以通過讀取一個帶有標題的文件來獲取它們(所有行都可以刪除)。 列表中的列名正在處理 - 刪除 3.item(第一項具有索引 0),將它們切片[2:89]
,然后使用變量cols
讀取所有 csv。
您可以循環獲取所有文件,使用usecols=cols
從函數read_csv
獲取數據農場,該函數附加到數據幀列表中。 然后將此列表連接到一個大輸出數據幀df
。
處理后輸出 df 通過函數to_csv寫入文件。
import pandas as pd
import os
Source = r'F:\backup\finalized 2'
OutputCSV = r'F:\Tom\Python\output.csv'
normSource = os.path.normpath(Source)
#find column names and delete 1,2,4, and more as 90th columns
#read one csv
names = pd.read_csv(os.path.join(normSource,'header.csv'), sep=",")
#column names to list
cols = names.columns.tolist()
print cols
#the first item has index 0, so you need delete 0, 1, 3, 89, 90, 91.. item
#delete 3 item
del cols[3]
#get 2,4,5,...89 item
cols = cols[2:89]
print cols
dfs = []
#create empty df for output
d = pd.DataFrame()
for root, dirs, files in os.walk(normSource, topdown=False):
for name in files:
print root
print name
if name.startswith('201510') and name.endswith('client.csv'):
#only read columns from list cols
dfs.append(pd.read_csv(os.path.join(root, name), sep=',', index_col=False, usecols=cols))
df = pd.concat(dfs, ignore_index=True)
#all files in one dataframe
print df.head()
df['ten_avg'] = df.iloc[:, 30:50].sum(axis=1).astype('int64') / 20
df['twenty_avg'] = df.iloc[:, 30:70].sum(axis=1).astype('int64') / 40
print df.head()
#output to csv, remove index
df.to_csv(OutputCSV, sep=",", index=False)
Pandas Dataframe 在這里應該派上用場。
使用以下命令導入數據框中的每個文件:
import pandas as pd
df = pd.DataFrame.from_csv('<csvfilename>',index_col=False,parse_dates=False)
然后將其附加到主數據框:
master = master.append(df,ignore_index=True)
對數據框執行操作,然后使用以下命令導出:
master.to_csv('<csv_file_name>')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.