我是熊猫新手。我正在处理一些示例数据。
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'
除以'&'
来创建了一个数据框。但是之后,我该如何按'='
拆分这些列表,并将第一项添加为标题?
答案 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'}]