如何从结构固定的Python字典构建指定格式的Pandas DataFrame
问题解答
可以基于该固定结构字典构建出目标格式的DataFrame,实现思路与可运行代码如下:
实现逻辑
- 首先提取字典中
Type 1 Result对应的长字符串,按固定结构拆分元素:字符串前7个连续带单位的字段为DataFrame列名:
CO (mg/km)、THC (mg/km)、NMHC (mg/km)、NOX (mg/km)、THC + NOX (mg/km)、PM (mg/km)、PN (#.1011/km)
后续内容按固定的8个行索引拆分,每个行索引后跟随的7个值对应该行各列的取值,固定行索引列表不会随数值变动改变 - 对拆分出的取值做标准化处理,将
-、(11)、(12)、N/A统一替换为Pandas可识别的空值pd.NA - 最后将处理好的行数据、行索引、列名组合生成DataFrame即可
可运行示例代码
import pandas as pd # 原始字典 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'} # 拆分长字符串并过滤空值 content_list = [item for item in d1['Type 1 Result'].split() if item] # 提取列名 columns = content_list[:7] # 预定义固定行索引 fixed_row_index = [ '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' ] # 逐行提取数值 row_values = [] current_pos = 7 for index_name in fixed_row_index: # 跳过行索引对应的字符数 index_len = len(index_name.split()) current_pos += index_len # 提取当前行的7个数值 current_values = content_list[current_pos:current_pos+7] row_values.append(current_values) current_pos +=7 # 生成DataFrame并替换空值标识 df = pd.DataFrame(row_values, index=fixed_row_index, columns=columns) df = df.replace(['-', '(11)', '(12)', 'N/A'], pd.NA) # 输出查看结果 print(df)
运行代码后得到的DataFrame完全匹配目标格式。
内容的提问来源于stack exchange,提问作者Jayashree Sridhar
相关产品推荐
相关产品推荐

