Python 将dataframe列中的一个字符串列解析为许多其他列

Python 将dataframe列中的一个字符串列解析为许多其他列,python,regex,pandas,Python,Regex,Pandas,我在熊猫数据框中有一列,它包含如下格式的字符串,例如 fullyRandom=true+mapSizeDividedBy64=51048 mapSizeDividedBy16000=9756+fullyRandom=false qType=MpmcArrayQueue+qCapacity=822398+burstSize=664 count=11087+mySeed=2+maxLength=9490 capacity=27281 capacity=79882 例如,我们可以将第一行读取为两个参

我在熊猫数据框中有一列,它包含如下格式的字符串,例如

fullyRandom=true+mapSizeDividedBy64=51048
mapSizeDividedBy16000=9756+fullyRandom=false
qType=MpmcArrayQueue+qCapacity=822398+burstSize=664
count=11087+mySeed=2+maxLength=9490
capacity=27281
capacity=79882
例如,我们可以将第一行读取为两个参数,由“+”分隔,每个参数都有一个值,由“=”清除,该值在参数及其值之间分隔

在输出中,我询问是否有一个python脚本,它可以提取参数,也可以检索一个唯一参数列表,如下所示

[fullyRandom,mapSizeDividedBy64,mapSizeDividedBy64,qType,qCapacity,qCapacity, count,mySeed,maxLength,Capacity]
请注意,在上一个列表中,它只包含唯一的参数,而不包含其值


或者扩展熊猫数据帧如果我们可以解析下面的列并将其转换为多个列,那么这并不太困难,每一列都是一个存储其值的参数

试试这个,它会将值存储在一个列表中

data = []
with open('<your text file>', 'r') as file:
    content = file.readlines()

    for row in content:
        if '+' in row:
            sub_row = row.strip('\n').split('+')
                for r in sub_row:
                    data.append(r)
        else:
            data.append(row.strip('\n'))

print(data)
要转换为可在熊猫中使用的dict列表,请执行以下操作:

dict_list = []
for item in data:
    df = {
        item.split('=')[0]: item.split('=')[1]
    }
    dict_list.append(df)
print(dict_list)
输出:

['fullyRandom=true', 'mapSizeDividedBy64=51048', 'mapSizeDividedBy16000=9756', 'fullyRandom=false', 'qType=MpmcArrayQueue', 'qCapacity=822398', 'burstSize=664', 'count=11087', 'mySeed=2', 'maxLength=9490', 'capacity=27281', 'capacity=79882']
[{'fullyRandom': 'true'}, {'mapSizeDividedBy64': '51048'}, {'mapSizeDividedBy16000': '9756'}, {'fullyRandom': 'false'}, {'qType': 'MpmcArrayQueue'}, {'qCapacity': '822398'}, {'burstSize': '664'}, {'count': '11087'}, {'mySeed': '2'}, {'maxLength': '9490'}, {'capacity': '27281'}, {'capacity': '79882'}]
['fullyRandom', 'mapSizeDividedBy64', 'mapSizeDividedBy16000', 'fullyRandom', 'qType', 'qCapacity', 'burstSize', 'count', 'mySeed', 'maxLength', 'capacity', 'capacity']
要仅获取标题,请执行以下操作:

dict_list.append(item.split('=')[0])
输出:

['fullyRandom=true', 'mapSizeDividedBy64=51048', 'mapSizeDividedBy16000=9756', 'fullyRandom=false', 'qType=MpmcArrayQueue', 'qCapacity=822398', 'burstSize=664', 'count=11087', 'mySeed=2', 'maxLength=9490', 'capacity=27281', 'capacity=79882']
[{'fullyRandom': 'true'}, {'mapSizeDividedBy64': '51048'}, {'mapSizeDividedBy16000': '9756'}, {'fullyRandom': 'false'}, {'qType': 'MpmcArrayQueue'}, {'qCapacity': '822398'}, {'burstSize': '664'}, {'count': '11087'}, {'mySeed': '2'}, {'maxLength': '9490'}, {'capacity': '27281'}, {'capacity': '79882'}]
['fullyRandom', 'mapSizeDividedBy64', 'mapSizeDividedBy16000', 'fullyRandom', 'qType', 'qCapacity', 'burstSize', 'count', 'mySeed', 'maxLength', 'capacity', 'capacity']

预期的输出是什么?或者是一个唯一参数列表(在=运算符左侧的一个),或者是一行中可能有多个参数由+分隔,或者如果不是很难,我们可以将此列转换为多个列,每个参数一个,每个新列包含相应的值,在发布的示例中,应该有10个coulmns@yatuw您所说的列是什么意思?你和熊猫一起工作吗?请分享一个更完整的示例和预期输出是的,我正在与pandas datafram@yatuThanks合作以获得您的答复,但对我来说,我想要一个没有值@Zuks的唯一参数列表Maq@Peter,我刚刚更新了答案。希望这能有所帮助,但我相信还有更复杂的方法:)非常感谢,但对我来说,我只需要唯一的值(完全随机的应该是列表中的一次),因为在原始数据中,我有500万行,这真的很昂贵,我们需要所有参数,甚至重复@ZuksMaq@Peter你可以隐蔽到一组,这将给你独特的价值观。完美。非常感谢@Zuks Maq