【问题标题】:Convert column of strings with key value pairs into columns将具有键值对的字符串列转换为列
【发布时间】:2022-11-10 20:29:47
【问题描述】:

我有一个具有以下格式的CSV 文件,并希望将Message 列转换为具有标题和值的多列:

Message                         Color   Count
{'cnt1':12,'cnt2':15,'cn3':36   Yellow  12
{'cnt1':21,'cnt2':25,'cn3':23   Red     23
{'cnt1':23,'cnt2':21,'cn3':64   Green   19

输出:

【问题讨论】:

  • 所以错过了最后一个}?如果使用import ast 然后pd.json_normalize(dfb.Message.apply(ast.literal_eval)) 不起作用?
  • 不工作。你能尝试并提出解决方案吗
  • 好的,您可以在文本中广告示例数据吗?从图片中无法复制文本等数据。
  • 你现在可以试试。我已添加为普通文本

标签: python python-3.x pandas


【解决方案1】:

如果可能,最简单的方法是将} 添加到列末尾并解析字典,传递给json_normalize 并添加原始DataFrame:

import ast

df = pd.json_normalize(dfb.pop('Message').add('}').apply(ast.literal_eval)).join(dfb)
print (df) 
   cnt1  cnt2  cn3   Color  Count
0    12    15   36  Yellow     12
1    21    25   23     Red     23
2    23    21   64   Green     19

或者,如果需要键值对,请使用:

L = [dict(y.split(':') for y in x.replace("'","").strip("{}").split(',')) 
     for x in dfb.pop('Message')]

df = pd.json_normalize(L).join(dfb)
print (df)
  cnt1 cnt2 cn3   Color  Count
0   12   15  36  Yellow     12
1   21   25  23     Red     23
2   23   21  64   Green     19

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多