Как я могу прочитать несколько файлов CSV из разных подкаталогов и найти файл CSV, который имеет значение? - PullRequest
0 голосов
/ 06 апреля 2020

Допустим, у меня есть root каталог (папка) z и i, у которого есть три подкаталога (папки) a, b, и c

Каждый a, b, и c содержит один csv файл, который является похожими данными и имеет схожие имена a_data, b_data, и c_data)

Из трех csv файлов только один csv содержит значение целого числа 100 внутри фрейм данных .`

Как мне спроектировать oop, который сканирует все csv в трех подпапках и сообщает мне, какое csv имеет значение "100"?

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

В настоящий момент я не могу описать свою идею, но я предполагаю, что будет быстрее открыть каждый файл с Pandas, чем пытаться найти текст CSV, прежде чем открыть его в Pandas. Кроме того, он, вероятно, будет читаться лучше.

Итак, предполагая, что быстрее открыть все с помощью Pandas, чем с помощью чего-то вроде CSV-библиотеки , давайте сделаем:

import pandas as pd
import numpy as np

df = pd.read_csv("~/z/a/a_data.csv")

if not df["column"].isin([100]).all():
  df = pd.read_csv("~/z/b/b_data.csv")

  if not df["column"].isin([100]).all():
    df = pd.read_csv("~/z/c/c_data.csv")

    if not df["column"].isin([100]).all():
      print("No value")

В конечном счете, вложенные, если это не красиво. Но трудно понять, что подходит, не видя ваш код. Если вы можете опубликовать свой код, это поможет. В противном случае надеюсь, что вышеизложенное поможет вам начать работу.

1 голос
/ 06 апреля 2020
import glob
import pandas as pd
val = 100
subdir_files = glob.glob(folder_path  + '/**/*.csv', recursive=True)
for file in subdir_files:
    df = pd.read_csv(file)
    if val in df['column_name'].values:
        print(file)
        break
0 голосов
/ 06 апреля 2020

Вы можете l oop по вашему списку csv_files, например, читая каждый с помощью pandas.read_csv и находя первый с нужным значением. Предложение else в for l oop будет выполнено, если l oop завершится нормально (т.е. не на break), что соответствует ни одному из файлов, содержащих желаемое значение.

import pandas as pd
csv_files = ["a/a.csv", "b/b.csv", "c/c.csv"]
found_df = None
for csv_file in csv_files:
    df = pd.read_csv(csv_file)
    if 100 in df["column"].values:
        found_df = df
        break
else:
    print("No value found")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...