我正在创建一个程序,根据指示计划/报告类型的名称限定符来摄取从 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.strip
或 key.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/