首页 > 解决方案 > 熊猫从拆分现有列中添加列

问题描述

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

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''&'。但在那之后,我如何拆分这些列表'='并将第一项添加为标题?

标签: pythonpandas

解决方案


为每一行创建字典列表并调用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

list 的另一个解决方案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'}]

推荐阅读