Как выбрать уникальные значения из именованного столбца в нескольких файлах .csv? - PullRequest
2 голосов
/ 18 апреля 2019

Я пытаюсь создать список уникальных идентификаторов из нескольких CSV-файлов.

У меня около 80 CSV-файлов, содержащих данные, все в одном формате и в одном каталоге.Файлы содержат данные временных рядов примерно с 1500 сайтов, но не все сайты находятся во всех файлах.Столбец с нужными мне данными называется 'Site Id'.Я могу получить уникальные значения из первого CSV, создав dataframe, но я не вижу, как перебрать все оставшиеся файлы.

Если сейчас это не очевидно, я начинающий, и мои преподаватели в отпуске!

Я пытался создать df для одного файла, но я не могу понять следующий шаг.

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

Ответы [ 3 ]

2 голосов
/ 18 апреля 2019

Вы можете сделать что-то вроде этого.Я использовал функцию os.listdir , чтобы получить все файлы, а затем list.extend , чтобы объединить идентификаторы сайтов, с которыми я столкнулся, в свой список 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.
0 голосов
/ 18 апреля 2019

Сначала вам нужно собрать файлы в список, из которого вы будете получать данные. Есть много способов сделать это, если вы знаете каталог, в котором они все находятся, см. Этот ответ для многих опций .

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
    f.extend(filenames)
    break

Тогда в этом списке вам нужно собрать те уникальные значения, которые вам нужны. Без использования Pandas, поскольку не похоже, что вы действительно нуждаетесь в информации в кадре данных:

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


0 голосов
/ 18 апреля 2019

Вы можете сделать что-то вроде этого, чтобы перебрать все ваши 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.) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...