我有10000个文件的文件夹,其中包含10个变量(X1,X2,...,X10)的数据。
文件名仅为File1.json,File2.json等。
我需要为每个变量创建一个数据框,即10个数据框。
输入
所需的输出
我正在执行以下操作
for i in range(0, len(VARIABLES)):
%reset_selective -f "^DATA$"
DATA=pd.DataFrame()
Data_name=VARIABLES[i]
print(Data_name)
for ii in range(0, len(FILES)):
file_name1='Directory/'
file_name2= FILES[ii]
file_name=file_name1+file_name2
with open(file_name, 'r') as fer:
data1 = json.load(fer)
df = pd.DataFrame({'count': data1})
Var_namei=df['count']['consistname']
if Var_namei==Data_name:
#create Dataframe
代码对于第一个变量工作正常,因为我不知道哪个文件包含X1的数据。
但是,从第二次迭代开始,没有必要重新打开每个文件来查找X2的数据。 同样,到达最后一次迭代时,我应该只打开X10的文件。
我想避免打开/考虑其数据已被用作DataFrame输入的文件,例如File2包含X1的值,因此当我寻找X2,X3等的值时,我不想再次打开File2
我尝试添加
k.iloc[ii,i]= ii
其中k是if条件之后的零大小数据帧(File,VAriable),以便在打开变量i的文件ii时在i列和ii行中放置1。这样,我可以在下一个迭代过程中跳过此类ii行文件。 但是,我无法在for循环中访问k个值。
有什么建议吗? 谢谢答案 0 :(得分:1)
欢迎来到SO。如果进行一些重构,您的代码会更简单。
file_name1='Directory/'
FileDATA={}
for file_name2 in FILES:
file_name=file_name1+file_name2
with open(file_name, 'r') as fer:
data1 = json.load(fer)
if data1['consistname'] in VARIABLES:
# Save the data1 object to FileDATA
# Assuming that every element in VARIABLES is unique
Data_name=data1['consistname']
FileDATA[Data_name] = data1
for Data_name in VARIABLES:
data1 = FileDATA[Data_name]
df = pd.DataFrame({'count': data1})
# create Dataframe
第一个循环一次遍历所有文件,并将与变量[X1, X2, ..., X10]
对应的数据保存在字典FileDATA
中。然后,您可以遍历变量以处理数据。
删除不必要的行后,
FileDATA={}
for file_name2 in FILES:
with open('Directory/' + file_name2, 'r') as fer:
data1 = json.load(fer)
if data1['consistname'] in VARIABLES:
FileDATA[data1['consistname']] = data1
for Data_name in VARIABLES:
df = pd.DataFrame({'count': FileDATA[Data_name]})
# create Dataframe