python - For循环根据指定值排除一些DataFrame行

标签 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_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 值。

有什么建议吗? 谢谢

最佳答案

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

关于python - For循环根据指定值排除一些DataFrame行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54806806/

相关文章:

python - Pandas:将开始/结束事件分组为间隔

Python Tornado 请求 JSON

python - Visual Studio Code - 你能为 python 提供实时 linting 吗?

python - 使用具有不同大小值的索引创建 pandas 数据框

python - 跨 Pandas DataFrame 中多列的映射方法

python - 将数据帧转换为列表

python - 全局名称 'RomanNumeralConverter' 未定义

python - tensorflow Triplet_semihard_loss 在多个纪元后不会改变

python - 使用现有变量向数据框添加新列

python - Pandas :TypeError: float() argument must be a string or a number, 不是 'pandas._libs.interval.Interval'