我意识到我发布的第一个版本确实不清楚,并且不符合网站规则,对此我感到抱歉。我删除了前一个并使其更加清晰。
这是我的第一篇文章,我对问题进行了研究,但找不到解决方法。
实际上,我有一个这样的DataFrame(SecurityInfo列包含字典,我将在下面详细介绍)
Rent_ID UserId Car_Id Rent_Date SecurityInfo
0 1 2 2018/05/09 dict_1
1 2 4 2018/05/10 dict_2
2 3 6 2018/05/11 dict_3
下面您将看到字典的外观。每个单元格一本字典。
{
"car_consumption": 99,
"car_route_option": "None",
"safetyEvents": [{
"latitude": 99.140763200350641,
"longitude": -9.6871865486956645,
"time": 1121,
"type": 3
}, {
"latitude": 99.115982330953294,
"longitude": -9.5833240979286927,
"time": 1710,
"type": 1
}, {
"latitude": 99.115982330953294,
"longitude": -9.5833240979286927,
"time": 1710,
"type": 2
},
"pollutant": {
"trip": 8.0129999999999999,
"nox": 44.960000000000001,
"co": 28.300000000000001,
"global": 8.7065000000000001
},
"ecoDriving": {
"scoreAccel": 2.5,
"score": 9.4000000000000004,
"scoreMain": 3.1000000000000001
}
}
您可以看到SafetyEvent键是一个嵌套键,其中还包含字典列表
我想获得这种输出
Rent_ID UserId Car_Id Rent_Date Car_Consumption car_route_option SafetyEvent trip nox co global scoreAccel score scoreMain
0 1 2 2018/05/09 99 None list1_of_SafetyEvent
1 2 4 2018/05/10 95 Good list2_of_SafetyEvent
2 3 6 2018/05/11 96 Bad list3_of_SafetyEvent
我尝试使用下面的函数,但是仅当我传递仅包含一个字典的数据框时,它才起作用,它不接受数据框列作为参数
def unpack(df, column, fillna=None):
ret = None # Intitlisation retour
if fillna is None: # Si
ret = pd.concat([df, pd.DataFrame((d for idx, d in df[column].iteritems()))], axis=1)
del ret[column]
else:
ret = pd.concat([df, pd.DataFrame((d for idx, d in df[column].iteritems())).fillna(fillna)], axis=1)
del ret[column]
return ret
我也尝试过,但是没有用
df_SafetyEvent = pd.DataFrame(df['SecurityInfo'].values.tolist(), index=df.index)
似乎我的词典没有被检测为词典,但是我检查了类型,实际上是。
谢谢您的帮助,如果我的帖子不合规,请告诉我,我会予以纠正。