Python 如何从每个字符串具有不同数量属性的字符串列表中创建数据帧
假设我有一个字符串列表,其中每个条目都有可变数量的“属性”,并且由于这个原因,顺序可能不同Python 如何从每个字符串具有不同数量属性的字符串列表中创建数据帧,python,regex,pandas,dataframe,data-structures,Python,Regex,Pandas,Dataframe,Data Structures,假设我有一个字符串列表,其中每个条目都有可变数量的“属性”,并且由于这个原因,顺序可能不同 str_list = ['id1 [first="jake" last="sully" hours="24"]', 'id2 [first="bob" last="ross" job="painter" hours="11]'] 如何将该列表转换为一个
str_list = ['id1 [first="jake" last="sully" hours="24"]',
'id2 [first="bob" last="ross" job="painter" hours="11]']
如何将该列表转换为一个数据帧,如果字符串缺少一个属性,那么它在df中将为空
DataFrame如下所示(列顺序必须如下所示):
我知道对于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
有没有办法在创建dataframe后重新排序而不必手动重新排序?我们可以在创建dataframe后重新排序列,dict是无序的。您能解释一下re.findall('id\d+',item)[0]}正在做什么吗?还有
x=re.findall(f'{col}=“*?”,item)
id first last hours job
0 id1 jake sully 24 NaN
1 id2 bob ross 11 painter