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中提取列表并将其放入列中。完成这两个步骤后,我就可以在该页上应用解决方案了。