如何从多个.csv文件的命名列中选择唯一值?

时间:2019-04-18 15:52:25

标签: python pandas loops csv dataframe

我正在尝试从多个csvs创建唯一ID的列表。

我大约有80个包含数据的csv,所有格式和格式都相同。这些文件包含来自1500个站点的时间序列数据,但并非所有站点都在所有文件中。包含我需要的数据的列称为'Site Id'。 通过创建dataframe,我可以从第一个csv中获得唯一的值,但是我看不到如何遍历所有其余文件。

如果现在还不太清楚,我是一个完整的初学者,我的导师正在休假!

我尝试为单个文件创建df,但是我不知道下一步。

df = pd.read_csv(r'C:filepathhere.csv')
ids = df['Site Id'].unique().tolist()

3 个答案:

答案 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())