Dictionary 从数据帧字典中提取数据帧

Dictionary 从数据帧字典中提取数据帧,dictionary,pandas,Dictionary,Pandas,我有一个包含许多csv文件的目录,我已经将这些文件加载到数据帧字典中 dfcsv_dict = {'dat1990': 'dat1990.csv', 'dat1991': 'dat1991.csv', 'other1991': 'other1991.csv'} 因此,只需3个示例小csv文件即可进行说明 import os import csv import pandas as pd #create 3 small csv files

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

    dfcsv_dict = {'dat1990': 'dat1990.csv', 'dat1991': 'dat1991.csv', 
        'other1991': 'other1991.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导入熊猫

    def myimport(csvfile):
        return pd.read_csv(csvfile)
迭代字典以将所有csv文件导入数据帧

    df_dict = {}
    for k, v in dfcsv_dict.items():
        df_dict[k] = myimport(v)
鉴于我现在在统一字典对象中可能有数千个数据帧,如何选择一些数据帧并将其从字典中提取出来

例如,我如何提取嵌套在字典中的这三个数据帧中的两个,比如

    dat1990 = df_dict['dat1990']
    dat1991 = df_dict['dat1991']
但不使用文字赋值。可能是字典上的某种循环结构,希望能够根据字典键中的字符串序列选择子组: 例如所有命名为dat或1991等的数据帧

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


我使用的是python 3.5。

这是2016年1月提出的一个老问题,但由于没有人回答,下面是2019年10月的答案。可能有助于将来的参考

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

步骤:

创建包含文件的文件夹的路径 创建文件夹中的文件列表 创建空数据帧以存储CSV数据帧 将每个csv作为数据帧循环 添加文件名为字符串的列 将单个数据帧连接到主数据帧 使用数据帧筛选器掩码创建新的数据帧 作为pd进口熊猫 导入操作系统 步骤1:创建文件夹的路径,Windows操作系统的语法 路径\测试\文件夹='C:\\test\\' 步骤2:在文件夹中创建CSV文件列表 文件夹中的文件=os.listdirpath\u测试文件夹 文件夹中的文件=[x代表文件夹中的文件中的x,如果x中的“.csv”] 步骤3:创建空的主数据框以存储CSV文件 df_master=pd.DataFrame 步骤4:循环浏览文件夹中的文件 对于文件夹中文件中的每个\u csv: CSV的临时数据帧 path\u csv=os.path.joinpath\u test\u文件夹,每个\u csv temp\u df=pd.read\u csvpath\u csv 添加文件名为的文件夹 temp_df['str_filename']=streach_csv 合并到主数据帧中 df_master=局部混凝土[df_master,temp_df] 然后过滤你的文件名 mask_filter=df_master['str_filename'].isin['dat1990.csv','dat1991.csv'] df_filter=df_master.loc[掩码_filter]
您只需迭代键df_dict.keys将返回您的键感谢您的响应。对于df_dict.keys中的k:j=df_dict[k]将给我一个数据帧j,我如何获得数据帧dat1991、dat1990等。谢谢其他用户问了类似的问题,并给出了答案