【问题标题】:DataFrame: New column based on other column with string dictionary/jsonDataFrame:基于具有字符串字典/json的其他列的新列
【发布时间】:2021-07-12 07:11:04
【问题描述】:

我在“bucket”列中使用(我猜?)作为嵌套 JSON 的字符串跟随 pandas DataFrame。

    id      name    bucket
0   11324   Soaps   {"page":{"url":"https://www.url.com", "color":"white"} ...}
0   11325   Cans    {"page":{"url":"https://www.url.com", "color":"black"} ...}
0   11326   Boxes   {"page":{"url":"https://www.url.com", "color":"red"} ...}

这里是数据类型:

dtypes
id                           int64
name                         object
bucket                       object

我想知道如何访问“bucket”列中的值,以便创建一个具有相应值的新列:

    id      name    bucket.                                                          color
0   11324   Soaps   {"web":{"project":"https://www.url1.com", "color":"white"} ...}  white
0   11325   Cans    {"web":{"project":"https://www.url2.com", "color":"white"} ...}  black
0   11326   Boxes   {"web":{"project":"https://www.url3.com", "color":"white"} ...}  red

【问题讨论】:

    标签: python json pandas string dictionary


    【解决方案1】:

    1。 Series.str.extract

    如果bucket 列中的值是string 类型,我们可以使用extractregex 模式

    df['color'] = df['bucket'].str.extract(r'"color":"([^"]+)"', expand=False)
    

    2。 Series.str.get

    否则,如果bucket 列中的值是dict 类型,我们可以使用str.get

    df['color'] = df['bucket'].str.get('page').str.get('color')
    

    >>> df
    
          id   name                                                   bucket  color
    0  11324  Soaps  {"page":{"url":"https://www.url.com", "color":"white"}}  white
    0  11325   Cans  {"page":{"url":"https://www.url.com", "color":"black"}}  black
    0  11326  Boxes    {"page":{"url":"https://www.url.com", "color":"red"}}    red
    

    【讨论】:

      【解决方案2】:

      只需使用eval() 方法和apply() 方法:

      df['bucket']=df['bucket'].apply(lambda x:eval(x))
      

      现在终于:

      df['color']=df['bucket'].apply(lambda x:list(x.values())[0]['color'])
      

      现在如果你打印 df 你会得到你想要的输出:

          id      name    bucket.                                                          color
      0   11324   Soaps   {"web":{"project":"https://www.url1.com", "color":"white"} ...}  white
      0   11325   Cans    {"web":{"project":"https://www.url2.com", "color":"white"} ...}  black
      0   11326   Boxes   {"web":{"project":"https://www.url3.com", "color":"white"} ...}  red
      

      【讨论】:

        猜你喜欢
        • 2021-04-23
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        相关资源
        最近更新 更多