假设我有一个根目录(文件夹)z
和i
有三个子目录(文件夹)a, b,
和c
每个a, b,
和c
包含一个csv
文件,它们是相似的数据,并且具有相似的名称a_data, b_data,
和c_data)
在三个csv
文件中,只有一个csv
在数据帧内包含整数100
的值.``
如何设计一个循环,该循环扫描三个子文件夹中的所有csv
,并告诉我哪个csv
的值为“ 100”?
非常感谢!
答案 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