问题描述
说我有一个字符串列表,其中每个条目都有可变数量的“属性”,并且因此顺序可能有所不同。
str_list = ['id1 [first="jake" last="sully" hours="24"]','id2 [first="bob" last="ross" job="painter" hours="11]']
如何将列表转换为数据框,如果字符串缺少属性,该字符串在df中将为空白?
DataFrame看起来像这样(列顺序必须如下所示):
id first job last hours
id1 jake sully 24
id2 bob painter ross 11
我知道id可以将字符串[[]拆分成第0个索引,所以这不是问题。 为了从字符串条目中获取属性项,我知道我可以使用
test_list = re.findall(r'"(.*?)"',str)
获取值列表,但是我将如何在每个条目中使用不同数量的“属性” /混乱顺序来实现我的总体目标呢?
解决方法
尝试一下:
import re
import pandas as pd
str_list = ['id1 [first="jake" last="sully" hours="24"]','id2 [first="bob" last="ross" job="painter" hours="11"]']
res = []
for item in str_list:
current = {'id': re.findall('id\d+',item)[0]}
for col in ['first','last','job','hours']:
x = re.findall(f'{col}="(.*?)"',item)
if x :
current[col] = x[0]
res.append(current)
pd.DataFrame(res)
输出:
id first last hours job
0 id1 jake sully 24 NaN
1 id2 bob ross 11 painter