熊猫从拆分现有列中添加列

时间:2019-01-30 11:07:58

标签: python pandas

我是熊猫新手。我正在处理一些示例数据。

My sample data is
'Col1'    'Col2'   'Query'
10000       101     $name=XXX&#age=18&#mark=100  
10001       102     $name=YYY&#age=17&#mark=95  

这是我的CSV数据。我想将其加载到如下所示的数据框中,

'Col1'    'Col2'   'Query'                       $name    #age   #mark
10000       101     $name=XXX&#age=18&#mark=100  XXX       18     100
10001       102     $name=YYY&#age=17&#mark=95    YYY       17     95  

到目前为止,我尝试过的是

querydf = pd.DataFrame(rundf['Query'].str.split('&').tolist())

我通过将列'Query'除以'&'来创建了一个数据框。但是之后,我该如何按'='拆分这些列表,并将第一项添加为标题?

1 个答案:

答案 0 :(得分:1)

为每行创建字典列表并调用DataFrame构造函数:

L = []
for v in df['Query']:
    out = {}
    for x in v.split('&'):
        a, b = x.split('=')
        out[a] = b
    L.append(out)

print (L)
[{'$name': 'XXX', '#age': '18', '#mark': '100'}, 
  {'$name': 'YYY', '#age': '17', '#mark': '95'}]

df = df.join(pd.DataFrame(L))
print (df)
    Col1  Col2                        Query #age #mark $name
0  10000   101  $name=XXX&#age=18&#mark=100   18   100   XXX
1  10001   102   $name=YYY&#age=17&#mark=95   17    95   YYY

列表L的另一种解决方案是通过parse_qs解析查询:

from urllib.parse import parse_qs

L = [{k: v[0] for k, v in dict(parse_qs(v)).items()} for v in df['Query']]
print (L)
[{'$name': 'XXX', '#age': '18', '#mark': '100'}, 
  {'$name': 'YYY', '#age': '17', '#mark': '95'}]