![](/img/trans.png)
[英]How can I use python to iterate through multiple csv files and if a value is the same, update another value?
[英]How can I iterate through different CSV files with Python/Pandas by first column and item value?
我有一個文件夾,其中有100多個CSV文件,每個文件有4萬多行。 我正在嘗試按第一列遍歷這些文件,該列具有ID號。 我的目的是在CSV文件中查找具有相同ID號的行,然后通過將具有相同ID號的行串聯/放在一起來創建新的CSV文件。
我跳過了前4行,因為它們的數據不相關。
我當前的代碼是:
for root, dirs, files in os.walk(csv_directory):
for item in files:
if item.endswith(".csv"):
date_string = item.split(".")[1]
year_string = date_string[:4]
file_directory = os.path.join(root,item)
list_csv = []
print "Reading %s ..." % item
# Reads the .csv files
with open(file_directory , 'rb') as file:
reader = csv.reader(file, delimiter = ',')
next(reader)
next(reader)
next(reader)
next(reader)
# Takes all rows for ID, col2 ,col3 in the directory
for row in reader:
index = [0,1,8]
list_csv.append(row[i] for i in index)
list_csv.append(date_string)
list_total.append(list_csv)
print len(list_total) , "rows are added."
print "Total Number of Rows: " , len(list_total)
任何幫助將非常感激!!
您可以按照以下方式使用。
import pandas as pd
from os import listdir
from os.path import join
source_path, dst_path = 'source/path', 'dst/path'
獲取所有.csv
文件:
files = [f for f in listdir(source_path) if f.endswith('.csv')]
讀取所有.csv
文件,並使用pd.concat()
進行合並-與40K行中的〜100個文件組成每個文件,您將擁有〜4m行,除非每個文件具有大量列,否則該行應該是可管理的:
all_files = pd.concat([pd.read_csv(join(source_path, f_name), skiprows=4) for f_name in files])
使用.groupby()
將所有文件按id
分組(假定在'id_column'
找到),並將所有相同ID的文件保存回.csv
:
files_by_id = all_files.groupby('id_column')
for id, data in files_by_id:
data.to_csv(join(dst_path, 'file_{}.csv'.format(id)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.