DataFrame-列中的值是字典.如何对主数据帧设置关键帧和值



我有这个df:

d = {'name':'CompanyABCD' , 
'office_location':[{'office_x':'lat,long','office_y':'lat,long'}] , 
'total_employees':100}
test = pd.DataFrame(d)

测试显示如下:

name          office_location                            total_employees
0   CompanyABCD   {'office_x': 'lat,long', 'office_y':...    100

我如何提取信息,使数据帧结果如下:

name          office_location                            total_employees  OfficeName  LatLong 
0   CompanyABCD   {'office_x': 'lat,long', 'office_y':...    100              office_x    lat,long
0   CompanyABCD   {'office_x': 'lat,long', 'office_y':...    100              office_y    lat,long

您可以将字典转换为数据帧和melt,然后将repeating之后的数据帧连接/分配给字典的length

m = pd.DataFrame(test['office_location'].tolist())
.melt(var_name='Office',value_name='LatLong')
out = (test.loc[test.index.repeat(test['office_location'].str.len())]
.reset_index(drop=True).assign(**m))

name                                   office_location  
0  CompanyABCD  {'office_x': 'lat,long', 'office_y': 'lat,long'}   
1  CompanyABCD  {'office_x': 'lat,long', 'office_y': 'lat,long'}   
total_employees    Office   LatLong  
0              100  office_x  lat,long  
1              100  office_y  lat,long  

这里最简单的方法是将字典提取到一个简单的字典列表中,并从中构建一个辅助数据帧,然后将其水平连接到原始数据帧:

aux = pd.DataFrame(test['office_location'].tolist()).stack().reset_index(level=1)

在这一点上,我们有:

level_1         0
0  office_x  lat,long
0  office_y  lat,long

连接时间:

resul = pd.concat([test, aux.rename(columns={'level_1': 'OfficeName',
'0': 'LatLong'})], axis=1)

获取:

name                                   office_location  total_employees OfficeName         0
0  CompanyABCD  {'office_x': 'lat,long', 'office_y': 'lat,long'}              100   office_x  lat,long
0  CompanyABCD  {'office_x': 'lat,long', 'office_y': 'lat,long'}              100   office_y  lat,long

但我认为,当你从数据库中提取数据时,在向数据帧提供数据之前,你应该对数据进行预处理

相关内容

  • 没有找到相关文章

最新更新