我正在尝试从多个csvs创建唯一ID的列表。
我大约有80个包含数据的csv,所有格式和格式都相同。这些文件包含来自1500个站点的时间序列数据,但并非所有站点都在所有文件中。包含我需要的数据的列称为'Site Id'
。
通过创建dataframe
,我可以从第一个csv中获得唯一的值,但是我看不到如何遍历所有其余文件。
如果现在还不太清楚,我是一个完整的初学者,我的导师正在休假!
我尝试为单个文件创建df
,但是我不知道下一步。
df = pd.read_csv(r'C:filepathhere.csv')
ids = df['Site Id'].unique().tolist()
答案 0 :(得分:2)
您可以执行以下操作。我使用os.listdir函数获取所有文件,然后使用list.extend将遇到的站点ID合并到siteIDs
列表中。最后,将列表变成集合,然后再返回列表,将删除所有重复的条目。
siteIDs = []
directoryToCSVs = r'c:\...'
for filename in os.listdir(directoryToCSVs):
if filename.lower().endswith('.csv'):
df = pd.read_csv(r'C:filepathhere.csv')
siteIDs.extend( df['Site Id'].tolist() )
#remove duplicate site IDs
siteIDs = list(set(siteIds))
#siteIDs will now contain a list of the unique site IDs across all of your CSV files.
答案 1 :(得分:0)
您可以执行以下操作来遍历所有CSV并将它们加载到数据帧中:
from os import walk, path
import pandas as pd
path = 'Path to CSV dir'
csv_paths = []
for root, dirs, files in walk(path):
for c in glob(path.join(root, '*.csv')):
csv_paths.append(c)
for file_path in csv_paths:
df = pd.read_csv(filepath_or_buffer=file_path)
# do something with df (append, export, etc.)
答案 2 :(得分:0)
首先,您需要将文件收集到要从中获取数据的列表中。假设您知道它们全部位于的目录see this answer for many options,有很多方法可以实现。
from os import walk
f = []
for (dirpath, dirnames, filenames) in walk(mypath):
f.extend(filenames)
break
然后在该列表中,您需要收集所需的那些唯一值。不使用熊猫,因为似乎您实际上并不需要数据框中的信息:
import csv
unique_data = {}
for file in f:
with open(file, 'rU') as infile:
reader = csv.DictReader(infile)
for row in reader:
# go through each, add value to dictionary
for header, value in row.items():
unique_data[value] = 0
# unqiue_data.keys() is now your list of unique values, if you want a true list
unique_data_list = list(unqiue_data.keys())