【问题标题】:Extracting dataframes from a dictionary of dataframes从数据帧字典中提取数据帧
【发布时间】:2016-04-28 05:55:32
【问题描述】:

我有一个包含许多 csv 文件的目录,这些文件已加载到数据帧字典中

因此,只需 3 个示例小 csv 文件来说明

    import os
    import csv
    import pandas as pd

    #create 3 small csv files for test purposes
    os.chdir('c:/test')
    with open('dat1990.csv','w',newline='') as fp:
        a=csv.writer(fp,delimiter=',')
        data = [['Stock','Sales','Year'],
                ['100','24','1990'],
                ['120','33','1990'],
                ['23','5','1990']]
        a.writerows(data)

    with open('dat1991.csv','w',newline='') as fp:
        a=csv.writer(fp,delimiter=',')
        data = [['Stock','Sales','Year'],
                ['400','35','1991'],
                ['450','55','1991'],
                ['34','6','1991']]
        a.writerows(data)

    with open('other1991.csv','w',newline='') as fp:
        a=csv.writer(fp,delimiter=',')
        data = [['Stock','Sales','Year'],
                ['500','56','1991'],
                ['600','44','1991'],
                ['56','55','1991']]
        a.writerows(data)

创建用于将 csv 文件处理为数据帧的字典

    dfcsv_dict = {'dat1990': 'dat1990.csv', 'dat1991': 'dat1991.csv', 
        'other1991': 'other1991.csv'}

创建一个简单的导入函数,用于将 csv 导入 pandas

    def myimport(csvfile):
        return pd.read_csv(csvfile)

遍历字典,将所有 csv 文件导入 pandas 数据帧

    df_dict = {}
    for k, v in dfcsv_dict.items():
        df_dict[k] = myimport(v)

鉴于我现在在统一字典对象中可能有数千个数据帧,我该如何选择一些并将它们从字典中“提取”出来?

例如,我将如何仅提取嵌套在字典中的这三个数据帧中的两个,类似于

    dat1990 = df_dict['dat1990']
    dat1991 = df_dict['dat1991']

但不使用文字赋值。也许是字典上的某种循环结构,希望有一种基于字典键中的字符串序列选择子组的方法: 例如,所有名为 dat1991 等的数据框

我不想要另一个“子字典”,但想将它们提取为命名为“独立”数据帧,如上面的代码所示。

我正在使用 python 3.5。

【问题讨论】:

  • 您可以遍历密钥 df_dict.keys() 将返回您的密钥
  • 感谢您的回复。
  • for k in df_dict.keys(): j = df_dict[k] 会给我一个数据帧“j”,我如何获得数据帧“dat1991”、“dat1990”等。谢谢跨度>
  • 另一个用户问了类似的问题,答案是here

标签: dictionary pandas


【解决方案1】:

这是 2016 年 1 月的一个老问题,但由于没有人回答,这里是 2019 年 10 月的答案。可能对将来的参考有用。

我认为您可以跳过创建数据框字典的步骤。我之前写了一个关于如何从多个 CSV 文件创建单个主数据框的答案,并在主数据框中添加一列,其中包含从 CSV 文件名中提取的字符串。我认为你基本上可以在这里做同样的事情。

Create a dataframe of csv files based on timestamp intervals

步骤:

  1. 创建包含文件的文件夹路径
  2. 创建文件夹中的文件列表
  3. 创建空数据框以存储 CSV 数据框
  4. 将每个 csv 作为数据帧循环
  5. 以字符串形式添加文件名列
  6. 将单个数据帧连接到主数据帧
  7. 使用数据框过滤器掩码创建新数据框
import pandas as pd
import os

# Step 1: create a path to the folder, syntax for Windows OS
path_test_folder = 'C:\\test\\'

# Step 2: create a list of CSV files in the folder
files_in_folder = os.listdir(path_test_folder)
files_in_folder = [x for x in files_in_folder if '.csv' in x]

# Step 3: create empty master dataframe to store CSV files
df_master = pd.DataFrame()

# Step 4: loop through the files in folder
for each_csv in files_in_folder:

    # temporary dataframe for the CSV
    path_csv = os.path.join(path_test_folder, each_csv)
    temp_df = pd.read_csv(path_csv)

    # add folder with filename
    temp_df['str_filename'] = str(each_csv)

    # combine into master dataframe
    df_master = pd.concat([df_master, temp_df])

# then filter on your filenames
mask_filter = df_master['str_filename'].isin(['dat1990.csv', 'dat1991.csv'])
df_filter = df_master.loc[mask_filter]

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2019-08-12
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2016-07-12
    • 2020-08-22
    相关资源
    最近更新 更多