使用嵌套列表和字典解析数据框?

时间:2019-02-19 18:35:56

标签: python pandas dataframe

我对pandas / python很陌生,目前无法进行此解析。 解析具有嵌套列表和字典的数据框

DF:

    a       b       c             d         e        f          

0   1       2   {'county':        3         4       [{'name': 'essex,england','locality': None,'region':'harlow','subregion':None}]
               'cleveland', 
             'country': 
                'england'}       

1   4       5   {'county':        6         7       [{'name': 'hampsire,england','locality': None,'region':'alton','subregion':None}]
               'hamphsire', 
             'country': 
                'england'}

输出应为:

     a      b    county     country      d       e      name        locality       region         subregion 

0   1      2   cleveland    england      3       4      essex,england      None      harlow         None


1   4      5   hamphsire    england      6        7     hampsire,england   None      alton         None

我尝试过的/已知的: 如果仅存在一行并且成功了,我就解析了df,但是两行我做不到。 我如何解析单行:创建一个函数并展开它,然后合并到df

如果需要,请指定原始命令:

F列:

   [{'name': 'essex, england',
'locality': None,
'region': 'harlow',
'subregion': None,

c列

'location': {0: {'county': 'cleveland',
                   'country': 'england'} 

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的意思,但df.from_dict()应该可以解决您的问题。

您可以在此处找到文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.from_dict.html

尝试类似的东西:

data = {dict with the data}
keys = [list with the name of the columns]
my_english_dataframe = pd.DataFrame.from_dict(data, orient='index', columns=keys)

熊猫可以执行一些非常强大的操作,您只需要习惯它的工作原理即可。

答案 1 :(得分:0)

遵循您的逻辑:

import pandas as pd

df = pd.DataFrame({'a':[1,4], 
                   'b':[2,5],
                   'c':[{'county':'cleveland','country':'england'},
                        {'county':'hamphsire','country':'england'}],
                   'd':[3,6], 
                   'e':[4,7],
                   'f':[{'name': 'essex,england','locality': 
None,'region':'harlow','subregion':None},
                        {'name': 'hampsire,england','locality': 
None,'region':'alton','subregion':None}]})

df1 = df['c'].apply(pd.Series)
df2 = df['f'].apply(pd.Series)
result = pd.concat([df.filter(['a', 'b']), df1,df.filter(['d', 'e']), df2] , axis= 1)

print(result)

输出:

   a  b     county  country  d  e              name locality  region subregion
0  1  2  cleveland  england  3  4     essex,england     None  harlow      None
1  4  5  hamphsire  england  6  7  hampsire,england     None   alton      None