如何从不同的子目录中读取多个csv文件并找到具有该值的csv文件?

时间:2020-04-06 05:00:22

标签: python numpy dataframe

假设我有一个根目录(文件夹)zi有三个子目录(文件夹)a, b,c

每个a, b,c包含一个csv文件,它们是相似的数据,并且具有相似的名称a_data, b_data,c_data)

在三个csv文件中,只有一个csv在数据帧内包含整数100的值.``

如何设计一个循环,该循环扫描三个子文件夹中的所有csv,并告诉我哪个csv的值为“ 100”?

非常感谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

目前我无法描述我的想法,但是我认为用Pandas打开每个文件比尝试在熊猫中打开CSV文本之前搜索要快得多。另外,它可能会读起来更好。

因此,假设使用Pandas打开所有内容比使用CSV library之类的东西快,那就做吧:

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

最终,如果不是很漂亮,则嵌套。但是,不看代码就很难找到合适的方法。如果您可以发布代码,那将会有所帮助。否则,希望以上内容对您有所帮助。

答案 2 :(得分:0)

您可以像这样遍历arr.mapIndexed { index, i -> i to index } //List<Pair<Int, Int>> - [(2, 0), (3, 1), (4, 2), (2, 3), (5, 4), (2, 5), (6, 6), (3, 7), (2, 8)] .groupBy { it.first } //Map<Int, List<Pair<Int, Int>>> - {2=[(2, 0), (2, 3), (2, 5), (2, 8)], 3=[(3, 1), (3, 7)], 4=[(4, 2)], 5=[(5, 4)], 6=[(6, 6)]} .mapValues { it.value.map { it.second } } //Map<Int, List<Int>> - {2=[0, 3, 5, 8], 3=[1, 7], 4=[2], 5=[4], 6=[6]} 列表,使用csv_files读取每个列表,然后找到第一个具有所需值的列表。如果循环正常结束(即不在pandas.read_csv上),则循环else的{​​{1}}子句将被执行,对应于没有包含所需值的文件。

for