Python 如何展平有时包含列表有时包含值的dataframe json字段

Python 如何展平有时包含列表有时包含值的dataframe json字段,python,json,pandas,Python,Json,Pandas,我有一个Pandas dataframe,其中包含一个json字段,我需要将其展平(并保留其余的dataframe字段),令人困惑的是,该字段有时(对于某些记录)包含一个列表,有时仅包含一个值(不在列表中) 例如(请运行代码段以查看数据帧的示例): 等级 协议 类型 1. https {'ResultType':'regular'} 2. https {'ResultType':['amp','regular']} 您可以尝试以下解决方案: In [10]: columns = ['rank

我有一个Pandas dataframe,其中包含一个json字段,我需要将其展平(并保留其余的dataframe字段),令人困惑的是,该字段有时(对于某些记录)包含一个列表,有时仅包含一个值(不在列表中)

例如(请运行代码段以查看数据帧的示例):


等级
协议
类型
1.
https
{'ResultType':'regular'}
2.
https
{'ResultType':['amp','regular']}

您可以尝试以下解决方案:

In [10]: columns = ['rank','Protocol','Type']

In [11]: data=np.array([[1,'https',{'ResultType':'regular'}],[2,'https',{'ResultType':['amp','regular']}]])

In [12]: df = pd.DataFrame(data, columns=columns)

In [13]: df
Out[13]:
  rank Protocol                                   Type
0    1    https            {u'ResultType': u'regular'}
1    2    https  {u'ResultType': [u'amp', u'regular']}

In [14]: df['Type'] = df['Type'].apply(pd.Series)

In [15]: df2=df.set_index(['rank', 'Protocol'])['Type'].apply(pd.Series).stack()

In [16]: df2.name='Type'

In [17]: df2.reset_index()[columns]
Out[17]:
   rank Protocol     Type
0     1    https  regular
1     2    https      amp
2     2    https  regular

你能提供原始的JSON吗?在Parses上更好地处理这个问题是您的输入是第一个HTML,而期望的输出是第二个HTML吗?不,我使用HTML来举例说明数据帧,但我认为它将只显示呈现的表,而不是代码,我的输入是一个类似于第一个表生成的数据框,而期望的结果是一个类似于第二个表的数据框(请忽略我刚才用于添加表的html),工作正常!