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