Прочитайте несколько файлов CSV в парах из двух, сравните каждую пару - PullRequest
0 голосов
/ 16 октября 2019

У меня есть папка с несколькими CSV-файлами, названными так CINinfo_2019-08-08_rev1, CINinfo_2019-08-08_rev2, CINinfo_2019-08-08_rev3, CINinfo_2019-08-08_rev4, У меня около 70 файлов вВ одной папке я собираюсь автоматизировать этот процесс, чтобы я мог автоматически читать их по две пары, а затем сравнивать различия в каждой паре и получать результат в виде одной объединенной таблицы. В настоящее время я читаю их вручную и сравниваю различия. Вот код:

import pandas as pd
df1 = pd.read_csv("CINinfo_2019-08-08_rev1.csv")
df2 = pd.read_csv("CINinfo_2019-08-08_rev2.csv")

import numpy as np
rows,cols=np.where(comparison_values==False)

for item in zip(rows,cols):
    df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]],df2.iloc[item[0], item[1]])

Этот процесс настолько утомителен, что у меня есть другие папки с файлами CSV, которые мне нужно прочитать. Примечание как называются файлы CSV, все файлы CSV имеют одинаковые префиксы ( CINinfo_2019-08-08_ ), но суффикс в этом имени дела ( rev ) имеетинкрементное число от 1 до 70. Мне нужно это для чтения файлов попарно в формате 1 и 2 , 2 и 3, 3 и 4 продолжается. В этом случае я сравниваю такие пары, как CINinfo_2019-08-08_rev1 и CINinfo_2019-08-08_rev2 затем CINinfo_2019-08-08_rev2 и CINinfo_2019-08-08_rev3 происходит так, как можноЯ автоматизирую чтение этих файлов попарно, затем сравниваю различия в каждой из них и получаю по одной объединенной таблице?

1 Ответ

0 голосов
/ 16 октября 2019

Вы можете попробовать что-то вроде этого:

import os, re
import pandas as pd
import numpy as np

# your directory path here
path = r'path'

# get all files 
file_, pat = [], re.compile('.csv')
for root, dirs, files in os.walk(path):
    file_ = [os.path.join(root, f) for f in files if pat.search(f)]

# you may want to filter here, this line is just an example
# filter for all csv files containing 'rev'
file_ = [f for f in file_ if 'rev' in f]

# loop through the files of interest
for (idx, ff) in enumerate(file_[1:]):
    df1 = pd.read_csv(ff)
    df2 = pd.read_csv(file_[idx])

    rows, cols = np.where(comparison_values==False)
    for item in zip(rows,cols):
        # do calculation 

Этот ответ не является всеобъемлющим, но, надеюсь, даст вам возможный подход. Возможно, вам придется настроить фильтрацию или, возможно, отсортировать. Я не показал, как добавить результаты в итоговую таблицу, но лучше всего создать DataFrame temp и присвоить ему значения из пар файлов, а затем использовать pd.concat, чтобы добавить в окончательный DataFrame, которыйбудет содержать все результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...