如何将特定嵌套列表转换为去除dtype的三列pandas DataFrame
解决方案
你遇到的拆分问题核心是子列表内的第二段内容是pandas Series的默认打印输出,字段间用数量不等的空格做对齐填充,尾部还自带dtype: float64标识,用固定单空格分割必然会出现空值、字段错位问题,按下面的代码处理即可:
- 遍历每个子列表,第一个元素直接作为第一列的ID值
- 处理第二段Series文本:先删除尾部的
dtype: float64标识,逐行拆分后用无参数split()自动适配任意长度的连续空格,切出第二列的名称和第三列的数值 - 所有行收集完成后直接转成DataFrame即可
import pandas as pd # 此处替换为你的原始嵌套列表 raw_data = [['NP-00002', '''Motor1 0.126878 Lpi 0.099597 dtype: float64'''], ['NP-00067', '''Health 0.253135 Travel 0.157896 dtype: float64'''], ['LE-00035', '''Train 0.134382 Property 0.126089 dtype: float64'''], ['NP-00009', '''Start 0.171959 Casco 0.163557 dtype: float64''']] rows = [] for item in raw_data: group_id = item[0] # 清理dtype标识、去除首尾多余空白 content = item[1].replace('dtype: float64', '').strip() for line in content.split('\n'): line = line.strip() if not line: continue # 无参数split自动跳过任意长度连续空格,不会产生空值 feat_name, feat_val = line.split() rows.append([group_id, feat_name, float(feat_val)]) df = pd.DataFrame(rows, columns=['1st column', '2nd column', '3rd column'])
运行后输出结果完全匹配预期:
1st column 2nd column 3rd column 0 NP-00002 Motor1 0.126878 1 NP-00002 Lpi 0.099597 2 NP-00067 Health 0.253135 3 NP-00067 Travel 0.157896 4 LE-00035 Train 0.134382 5 LE-00035 Property 0.126089 6 NP-00009 Start 0.171959 7 NP-00009 Casco 0.163557
- 注意避坑:不要用
split(' ')指定单空格作为分隔符,连续空格会拆分出大量空字符串导致错位;无参数的split()默认以任意连续空白字符为分隔符,自动忽略首尾空白,完全适配这种打印对齐的多空格场景。 - 不需要提前对整个嵌套列表做
astype(str)转换,逐段提取内容时直接做字符串处理即可,不会触发类型异常。
内容的提问来源于stack exchange,提问作者UsrnmChck
相关产品推荐
相关产品推荐

