我有下面的 python 字典。字典的十进制值可以改变,但字符串值保持不变。字典的结构也是一样的。在这种情况下,是否可以从字典中构建数据框(如下所示的格式)?
Python字典:
d1=
{'Type 1 Result': 'CO (mg/km) THC (mg/km) NMHC (mg/km) NOX (mg/km) THC + NOX (mg/km) PM (mg/km) PN (#.1011/km) Measured(8) (9) 104.70 21.00 - 9.20 - 0.20 0.03 Ki x (8) (10) - - - - (11) - - Ki + (8) (10) 2.9541 0.1158 - 1.9789 (11) 0.0265 N/A Mean value calculated with Ki (M x Ki) or M+Ki) (9) 107.65 21.12 - 11.18 (12) 0.23 0.03 DF (+) (8) (10) 58.5770 - - 10.0990 5.0210 0.0000 0.0000 DF (x) (8) (10) - - - - - - - Final mean value calculated with Ki and DF (13) 166.2 21.1 - 21.3 37.3 0.23 0.03 Limit value 500 N/A N/A 80 170 4.5 6.0'}
所需的数据帧格式:
这确实是可能的。因为您的字典不包含超过 1 个键/值对,我建议将其合并为一个字符串:
my_string = f"{list(d1.keys())[0]} {list(d1.values())[0]}"
接下来,您可以标记列和行的“常量”值:
COL_ROWS = ["Type 1 Result", "CO \(mg/km\)", "THC \(mg/km\)", "NMHC \(mg/km\)", "NOX \(mg/km\)", "THC \+ PM \(mg/km\)", "PN \(#\.1011/km\)", "Measured\(8\) \(9\)", "Ki x \(8\) \(10\)", "Ki \+ \(8\) \(10\)", "Mean value calculated with Ki \(M x Ki\) or M\+Ki\) \(9\)", "DF \(\+\) \(8\) \(10\)", "DF \(x\) \(8\) \(10\)", "Final mean value calculated with Ki and DF \(13\)", "Limit value"]
随后,如果您删除出现在字符串COL_ROWS
的my_string
。使用:如果子字符串包含在列表中,则从字符串中删除子字符串:
import re
p = re.compile('|'.join(COL_ROWS ))
my_string = p.sub("", my_string).strip()
您将获得一个字符串,其中每个值都用空格分隔。然后,您可以简单地elements = my_string.split()
将它们整齐地列在列表中。
最后,您只需通过遍历列和元素来实现使用该数据初始化 DataFrame 的逻辑。
一种可能性是:
# separate headers from content
COLS, CONTENT = COL_ROWS[:8], COL_ROWS[8:]
all_cols = {}
for i in range(len(CONTENT)):
# store column name
col = [CONTENT[i].replace('\\', '']
# add values
col += el[i * 7: (i+1) * 7]
# store in dict
all_cols[COLS[i]] = col
# initialize DF with dict
final_df = pd.DataFrame(all_cols)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句