Python For循环基于指定值排除某些数据帧行
我有一个包含10000多个文件的文件夹,其中包含10个变量(X1,X2,…,X10)的数据 文件名只是File1.json、File2.json等 我需要为每个变量创建一个数据帧,即10个数据帧 输入Python For循环基于指定值排除某些数据帧行,python,pandas,dataframe,for-loop,jupyter-notebook,Python,Pandas,Dataframe,For Loop,Jupyter Notebook,我有一个包含10000多个文件的文件夹,其中包含10个变量(X1,X2,…,X10)的数据 文件名只是File1.json、File2.json等 我需要为每个变量创建一个数据帧,即10个数据帧 输入 变量=[X1,X2,…,X10] FILES=[File1.json,File2.json,…File14347.json] 所需输出 X1、X2、…、X10的数据帧 我正在做以下工作 for i in range(0, len(VARIABLES)): %reset_select
- 变量=[X1,X2,…,X10]
- FILES=[File1.json,File2.json,…File14347.json]
- X1、X2、…、X10的数据帧
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的文件。
我希望避免打开/考虑其数据已被用作数据帧输入的文件,例如File2包含X1的值,因此在查找X2、X3等值时,我不希望再次打开File2
我试着补充一下
k.iloc[ii,i]= ii
其中k是if条件后大小为零(文件、变量)的数据帧,以便在变量i的文件ii打开时在i列和ii行中放置1。这样,我可以在下一次迭代中跳过这样的ii行文件。
但是,在for循环期间,我无法访问k值
有什么建议吗?
谢谢欢迎来到SO。如果重构一点,代码会简单得多
file\u name1='Directory/'
FileDATA={}
对于文件中的文件名2:
文件名=文件名1+文件名2
打开(文件名为“r”)作为fer:
data1=json.load(fer)
如果变量中的data1['consistname']:
#将data1对象保存到FileDATA
#假设变量中的每个元素都是唯一的
Data_name=data1['consistname']
FileDATA[Data\u name]=data1
对于变量中的数据名称:
data1=文件数据[数据名称]
df=pd.DataFrame({'count':data1})
#创建数据帧
第一个循环遍历所有文件一次,并将与[X1,X2,…,X10]
变量对应的数据保存在字典文件数据中。然后您可以循环变量来处理数据
删除不必要的线路后
FileDATA={}
对于文件中的文件名2:
以open('Directory/'+file_name2,'r')作为fer:
data1=json.load(fer)
如果变量中的data1['consistname']:
FileDATA[data1['consistname']]=data1
对于变量中的数据名称:
df=pd.DataFrame({'count':FileDATA[Data\u name]})
#创建数据帧
能否请您缩进代码的第一个for循环,并提供输入和所需结果的示例?每个文件包含单个值还是多个值?多个值,从100到50000个值。每个文件的数据量事先是未知的,即我需要打开文件并提取所有值以了解它们的数量。您是否尝试使用pd.read_json将每个文件读入数据帧,然后根据列进行处理?是的,问题是这些文件是嵌套的json,因此我在“第一级”,然后是第二级的数据和子变量,我得到的是json.load(first_json\u variable)
。