Python 如何拆分熊猫词典?

Python 如何拆分熊猫词典?,python,pandas,Python,Pandas,我有一个像这样的熊猫系列 pd.DataFrame({"name": ['John','Mary','Tommy'], "time": ['"data": [{"t": "16:50"},{"t": "17:05"}]', '"data": [{"t": "16:10"}, {"t": "17:11"}, {"t": "17:12"}]', np.nan]}) nam

我有一个像这样的熊猫系列

pd.DataFrame({"name": ['John','Mary','Tommy'],
              "time": ['"data": [{"t": "16:50"},{"t": "17:05"}]',
                       '"data": [{"t": "16:10"}, {"t": "17:11"}, {"t": "17:12"}]',
                       np.nan]})
    name                                               time
0   John            "data": [{"t": "16:50"},{"t": "17:05"}]
1   Mary  "data": [{"t": "16:10"}, {"t": "17:11"}, {"t":...
2  Tommy                                                NaN
现在,当涉及到数据时,它看起来是这样的

pd.DataFrame({"name": ['John','Mary','Tommy'],
              "time": ['"data": [{"t": "16:50"},{"t": "17:05"}]',
                       '"data": [{"t": "16:10"}, {"t": "17:11"}, {"t": "17:12"}]',
                       np.nan]})
    name                                               time
0   John            "data": [{"t": "16:50"},{"t": "17:05"}]
1   Mary  "data": [{"t": "16:10"}, {"t": "17:11"}, {"t":...
2  Tommy                                                NaN
列中的时间是一个字典(字符串格式),它包含一个列表(最多3项,有时是
NaN
)。由于已知最大列表大小,因此我想将我的数据展平为以下内容

    name  time1  time2  time3
0   John  16:50  17:05    NaN
1   Mary  16:10  17:11  17:12
2  Tommy    NaN    NaN    NaN

除了使用for循环外,我不知道如何以Panda的方式实现这一点。提前感谢。

您可以将字符串求值为dict,然后将列表转换为列。最后,用name合并新列

pd.concat([data['name'],
           data.time.apply(lambda x: eval('{'+x+'}')['data'] if pd.notnull(x) else np.nan)\
           .apply(pd.Series).applymap(lambda x: x['t'] if pd.notnull(x) else x)],axis=1)\
           .rename(columns={0:'time1',1:'time2',2:'time3'})
Out[567]: 
    name  time1  time2  time3
0   John  16:50  17:05    NaN
1   Mary  16:10  17:11  17:12
2  Tommy    NaN    NaN    NaN

可能重复感谢@AnubhavSingh。我也看了一下那个。但我无法正确获取Pandas对象,因为我的时间列是字符串。我想需要做的是1。在时间列中,将字符串转换为json 2。从该JSON中提取列表并将其放入列中。完成这两个步骤后,我就可以在该页上应用解决方案了。