基于指定值排除某些数据帧行的For循环

2024-04-25 02:11:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有10000多个文件的文件夹,其中包含10个变量(X1,X2,…,X10)的数据。你知道吗

文件名只是File1.json、File2.json等

我需要为每个变量创建一个数据帧,即10个数据帧。你知道吗

输入

  • 变量=[X1,X2,…,X10]
  • FILES=[File1.json,File2.json。。。文件14347.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值。你知道吗

有什么建议吗? 谢谢


Tags: 文件数据nameinjsonfordatafiles
1条回答
网友
1楼 · 发布于 2024-04-25 02:11:39

欢迎来到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

相关问题 更多 >