python - 通过迭代对数据帧字典进行子集化

标签 python dictionary pandas iteration

我正在创建一个程序,根据指示计划/报告类型的名称限定符来摄取从 2001 年第一季度到 2016 年第一季度的一系列文本文件。限定符称为键(由于缺乏更好的名称)

keys=[' RI ','RCD','RCF','RCG','RCH','RCL','RCO','RCRII']

给定路径 C:\files,我创建所有符合条件的文本文件的字典

files=[]
for k in keys:
    for i in os.listdir(path):
        if os.path.isfile(os.path.join(path,i)) and k in i:
            files.append(i)

然后我创建一个字典

    df_dict={file[:-4].replace(" ","_"):pd.read_table(path+file,header=[0,1],index_col=0,error_bad_lines=False,dtype={'IDRSSD':object}, low_memory=False) for file in files}

示例字典如下所示: {(Schedule_RI_2001Q1:Col1 Col2 ColN), (Schedule_RCO_2001Q1:Col1 Col2 ColN), (Schedule_RI_2005Q2:Col1 Col2 ColN) }

以键值排列。

我需要根据报告类型从主词典创建词典。我想出了这个脚本(我知道它是业余的):

for key in keys:
    for k in df_dict.keys():
        for v in df_dict.values():
            if key in k:
                key.strip={k:v}

无论使用 key.strip 还是 key.strip(),我都会收到一条错误消息,分别是“'str'对象属性'strip'是只读的”或“无法分配给函数调用”。有没有更好的方法来完成这个任务。我创建聚合字典的原因是进行一些数据格式化等。非常感谢您对分解字典的帮助。

最佳答案

您不能直接在 key.stripkey.strip() 上创建字典,因为它们是函数。但是,您可以创建一个临时字典,并使用这些函数返回的值作为临时字典中的键。

这是一种相对安全的方法:

keys = ['a', 'b']
df_dict = { 'a_2010': 1, 'a_2007': 2, 'Schedule_b_2009Q1': 3 }

for key in keys:
    sub_dict[key.strip()] = {}
    for k, v in df_dict.items():
        if key in k:
            sub_dict[key.strip()][k] = v 

输出:

>>> sub_dict
{'a': {'a_2007': 2, 'a_2010': 1},
 'b': {'Schedule_b_2009Q1': 3}}

如果上面的内容看起来过于复杂,您可以简单地使用 locals() 来解决这个特定问题(但在任何地方使用它通常不是一个好习惯):

keys = ['a', 'b', 'c']
df_dict = { 'a_2010': 1, 'a_2007': 2, 'Schedule_b_2009Q1': 3 }

for key in keys:
    locals()[key.strip()] = {}
    for k, v in df_dict.items():
        if key in k:
            locals()[key.strip()][k] = v  

输出:

>>> a
{'a_2007': 2, 'a_2010': 1}
>>> b
{'Schedule_b_2009Q1': 3}

关于python - 通过迭代对数据帧字典进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38015193/

相关文章:

python - oauth2 请求-oauthlib 类型错误 : prepare_request_uri() got multiple values for keyword argument 'scope'

python - 访问包子目录中的数据

ios - Swift:想要将数组添加到现有字典

python - 如何在多个字典中只保留全局最大值的键值对?

java - 关于使用字符串数组形式的值查询 Java Map。

python - 如何在具有不同 Y 轴的同一 seaborn 图中很好地制作条形图和线图?

python - datetime.date(TimeStamp).replace(day=01) 给出一个整数是必需的错误

python - 原始输入和打印同时进行

python - 对包含卡住字符串的 pandas 数据框列进行过滤

Python Pandas 阅读