You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将Series内的列表元素转为DataFrame并保留NaN?

问题:将DataFrame列中的列表元素转换为子DataFrame,保留NaN

原始DataFrame定义如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'column_a' : [1, 2, 3], 
                   'conversions' : [[{'action_type': 'type1',
                                      'value': '1',
                                      'value_plus_10': '11'},
                                     {'action_type': 'type2',
                                      'value': '2',
                                      'value_plus_10': '12'}],
                                    np.nan, 
                                    [{'action_type': 'type3',
                                      'value': '3',
                                      'value_plus_10': '13'},
                                     {'action_type': 'type4',
                                      'value': '4',
                                      'value_plus_10': '14'}]]} )

conversions列的元素是字典列表或NaN,例如:

print(df['conversions'][0])
>>> [{'action_type': 'type1', 'value': '1', 'value_plus_10': '11'}, {'action_type': 'type2', 'value': '2', 'value_plus_10': '12'}]

需要将conversions列的列表元素转换为子DataFrame,NaN则保留,预期效果:

print(df['conversions'][0])
>>>
  action_type value value_plus_10
0       type1     1            11
1       type2     2            12

print(df['conversions'][1])
>>> nan

print(df['conversions'][2])
>>>
  action_type value value_plus_10
0       type3     3            13
1       type4     4            14

尝试过以下代码,但无实际效果:

df['conversions'] = df['conversions'].apply(lambda x : pd.DataFrame(x) if type(x)=='list' else x)

解决方案

你的代码问题在于类型判断错误:type(x)=='list'无法正确识别列表,因为type(x)返回的是<class 'list'>类型对象,而非字符串'list'。应该用isinstance(x, list)来准确判断类型。

修正后的代码:

df['conversions'] = df['conversions'].apply(lambda x: pd.DataFrame(x) if isinstance(x, list) else x)

验证效果:

print(df['conversions'][0])
# 输出:
  action_type value value_plus_10
0       type1     1            11
1       type2     2            12

print(df['conversions'][1])
# 输出:nan

print(df['conversions'][2])
# 输出:
  action_type value value_plus_10
0       type3     3            13
1       type4     4            14

如果需要更宽泛的可迭代类型判断,也可以用pd.api.types.is_list_like(x),但针对当前场景,isinstance(x, list)的判断更精准。


内容的提问来源于stack exchange,提问作者Mark the otter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:05:32