我在文件夹和子文件夹中具有以下文本文件的体系结构。
我想全部阅读它们并创建一个df。我正在使用此代码,但对我而言效果不佳,因为文本不是我检查的内容,文件也不等同于我的计数。
l = [pd.read_csv(filename,header=None, encoding='iso-8859-1') for filename in glob.glob("2018_01_01/*.txt")]
main_df = pd.concat(l, axis=1)
main_df = main_df.T
for i in range(2):
l = [pd.read_csv(filename, header=None, encoding='iso-8859-1',quoting=csv.QUOTE_NONE) for filename in glob.glob(str(foldernames[i+1])+ '/' + '*.txt')]
df = pd.concat(l, axis=1)
df = df.T
main_df = pd.merge(main_df, df)
答案 0 :(得分:4)
假定这些目录包含txt文件,其中所有信息的结构相同:
import os
import pandas as pd
df = pd.DataFrame(columns=['observation'])
path = '/path/to/directory/of/directories/'
for directory in os.listdir(path):
if os.path.isdir(directory):
for filename in os.listdir(directory):
with open(os.path.join(directory, filename)) as f:
observation = f.read()
current_df = pd.DataFrame({'observation': [observation]})
df = df.append(current_df, ignore_index=True)
所有文件都经过迭代后,df
应该是DataFrame
,其中包含不同txt文件中的所有信息。
答案 1 :(得分:1)
您可以使用for循环来实现。但在此之前,您需要为所有文件(如“ fol_0”中的“ fil_0”,“ fol_1”中的“ fil_1”,“ fol_2”中的“ fil_2”等)赋予所有文件以序列名称。这样可以方便地使用for循环:
dataframes = []
import pandas as pd
for var in range(1000):
name = "fol_" + str(var) + "/fil_" + str(var) + ".txt"
dataframes.append(pd.read_csv(name)) # if you need to use all the files at once
#otherwise
df = pd.read_csv(name) # you can use file one by one
它将为每个文件自动创建数据框。