【问题标题】:Pandas - Return key from a column that looks like a dictionaryPandas - 从看起来像字典的列中返回键
【发布时间】:2021-07-20 07:39:00
【问题描述】:

我在 pandas 中有一个如下所示的数据框

A B
data {"foo":"bar","cat":"dog"}
data1 {"foo":"car","cat":"log"}

我不认为B列中的数据实际上是一个字典,但它看起来像一个。我正在尝试创建一个新列 C,每行的值为“cat”,所以我想要的输出将是与上面相同的表,并在末尾附加一个新列 C,如下所示

C
dog
log

我尝试了以下方法:

  • snapshotT = df['B'].str.split(':') --> 这似乎没有任何作用
  • snapshotT = df['B'].rsplit(':',1) --> 这个返回错误 AttributeError: 'Series' object has no attribute 'rsplit'
  • snapshotTitle = df['B'].apply(lambda x: x.get('cat')) --> 这个返回错误 AttributeError: 'str' object has no attribute 'get'

我了解我的一般问题是我正在尝试使用不适用于我的数据类型的属性,但不确定还可以尝试什么。有什么想法吗?

【问题讨论】:

    标签: python pandas string types split


    【解决方案1】:

    您可以使用ast.literal_eval将字符串解析为标准python字典,然后使用dict.get获取值:

    from ast import literal_eval
    
    df["C"] = df["B"].apply(lambda x: literal_eval(x).get("cat"))
    print(df)
    

    打印:

           A                          B    C
    0   data  {"foo":"bar","cat":"dog"}  dog
    1  data1  {"foo":"car","cat":"log"}  log
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多