【问题标题】:Split pandas column into multiple columns based on 'key=value' items根据 'key=value' 项将 pandas 列拆分为多个列
【发布时间】:2020-12-11 16:27:53
【问题描述】:

我有一个数据框,其中一列包含多个“键=值”格式的信息。该列中可以出现近一百个不同的“key=value”,但为简单起见,我将使用这个示例,其中只有 4 个 (_browser, _status, _city, tag)

id  name   properties
0   A      {_browser=Chrome, _status=TRUE, _city=Paris}
1   B      {_browser=null, _status=TRUE, _city=London, tag=XYZ}
2   C      {_status=FALSE, tag=ABC}

如何将这种拆分属性字符串列转换为多列?

预期的输出是:

id  name   _browser    _status    _city    tag
0   A      Chrome      TRUE       Paris       
1   B      null        TRUE       London   XYZ
2   C                  FALSE               ABC

注意:这个值也可以包含空格(例如_city=Rio de Janeiro

【问题讨论】:

  • str 列中的属性是类型还是字典。
  • 它是一个字符串,其值由 = 符号分隔
  • @Huzefa 在我的情况下我不知道属性列中可以有多少个值并且它们不遵循严格的顺序,该项目可以出现在字符串的任何部分

标签: python pandas dataframe


【解决方案1】:

让我们使用str.findall 和正则表达式捕获组从properties 列中提取键值对:

df.join(pd.DataFrame(
    [dict(l) for l in df.pop('properties').str.findall(r'(\w+)=([^,\}]+)')]))

结果:

 id name _browser _status   _city  tag
  0    A   Chrome    TRUE   Paris  NaN
  1    B     null    TRUE  London  XYZ
  2    C      NaN   FALSE     NaN  ABC

【讨论】:

  • 感谢 Shubham,但是当我的值中有空格时,如何更改正则表达式?例如_city=里约热内卢
  • @eduardoftdo 在这种情况下我想你可以试试df.pop(properties').str.findall(r'(\w+)=([^,\}]+)')
  • @eduardoftdo 编码快乐!
  • 如果密钥本身有空格,是否有办法执行此正则表达式?
  • @AsifIqbal 是的,您可以这样做,只需将 regex 模式替换为 r'([^=]+)=([^,\}]+)'
猜你喜欢
  • 1970-01-01
  • 2023-02-12
  • 2023-02-17
  • 2021-08-07
  • 2021-04-29
  • 1970-01-01
  • 2021-09-18
  • 2021-01-24
  • 2021-02-24
相关资源
最近更新 更多