【问题标题】:Parse one string column in dataframe column into many other columns将数据框列中的一个字符串列解析为许多其他列
【发布时间】:2020-04-20 16:18:33
【问题描述】:

我在 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

例如,我们可以将第一行读取为由“+”分隔的 2 个参数,每个参数都有一个值,通过“=”清除参数和它的值之间的分隔。

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

[fullyRandom,mapSizeDividedBy64,mapSizeDividedBy64,qType,qCapacity,qCapacity, count,mySeed,maxLength,Capacity]

从上一个列表中注意到,它仅包含唯一参数而没有其值

如果我们可以解析以下列并转换成多列,或者扩展pandas数据框不是太难,每一列都是一个参数,其中存储它的值

【问题讨论】:

  • 预期输出是什么?
  • 唯一参数列表(= 运算符左侧的那个),请记住,一行中可能有多个参数,由 + 分隔,或者如果我们可以转移不是那么困难该列分为多个列,每个参数一列,每个新列包含相应的值,在发布的示例中应该有 10 列 @yatu
  • 列是什么意思?你在和熊猫一起工作吗?请分享一个更完整的例子和预期的输出
  • 是的,我正在使用 pandas datafram @yatu

标签: python regex pandas


【解决方案1】:

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

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)

输出:

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

转换成可以在 pandas 中使用的 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'}]

只获取标题:

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

输出:

['fullyRandom', 'mapSizeDividedBy64', 'mapSizeDividedBy16000', 'fullyRandom', 'qType', 'qCapacity', 'burstSize', 'count', 'mySeed', 'maxLength', 'capacity', 'capacity']

【讨论】:

  • 感谢您的回复,但对我来说,我想要一个没有其值的唯一参数列表@Zuks Maq
  • @Peter,我刚刚更新了答案。希望这会有所帮助,但我确信有一种更复杂的方法可以做到这一点:)
  • 非常感谢,但对我来说,我只需要唯一值(完全随机应该是列表中的一次),因为在原始数据中我有 500 万行,这真的很昂贵取所有参数,甚至重复@Zuks Maq
  • @Peter 你可以转换成一个集合,这会给你独特的价值。
  • 完美。非常感谢@Zuks Maq
猜你喜欢
  • 2019-10-17
  • 2020-09-15
  • 2011-05-20
  • 2019-04-28
  • 2015-08-27
相关资源
最近更新 更多