【问题标题】:How to perform operation over each dictionary in column?如何对列中的每个字典执行操作?
【发布时间】:2021-12-27 03:27:58
【问题描述】:

如果我在数据框中有一列带有字典:

col1
{10:24, 7:3}
{5:24, 1:2, 7:8}
{1:1}

如何执行从每个字典中为每一行提取键的操作?所以我需要得到:

col1
10, 7
5, 1, 7
1

如何做到这一点? df["col1"] = df["col1"].keys() 不起作用,我不知道为什么

【问题讨论】:

  • df['col1'].apply( lambda item: item.keys() ) ?
  • 或者它可能会与.str一起使用(即使你有字典)df["col1"].str.keys()

标签: python python-3.x dataframe dictionary


【解决方案1】:

DataFrame.keys() 来获取自己的索引,而不是从单元格中的字典中获取键。

但您可以使用.apply() 分别对列中的每个元素运行函数。

df['col1'] = df['col1'].apply(lambda item: item.keys())

最小的工作示例:

import pandas as pd

df = pd.DataFrame({'col1':[
   {10:24, 7:3},
   {5:24, 1:2, 7:8},
   {1:1},
]})


df['col1'] = df['col1'].apply(lambda item: item.keys())

print(df)

结果(现在它有带数字的元组):

        col1
0    (10, 7)
1  (5, 1, 7)
2        (1)

顺便说一句:

DataFrame 具有处理字符串.str 的特殊方法,它也可以与list/tuples 一起使用,其中一些甚至可以与dictionary 一起使用

它不能得到df['col1'].str.keys(),因为string没有keys,但是如果你使用df['col1'].str[10],那么你会从所有有键10的字典元素中得到

0    24.0
1     NaN
2     NaN

【讨论】:

    【解决方案2】:

    df["col1"] 不是字典——它是一个元组。这就解释了为什么您会收到AttributeError。您需要遍历数据框列中的每一行并在其上调用keys()

    df['col1'] = [row.keys() for row in df["col1"]]
    

    【讨论】:

      【解决方案3】:

      DataFrame.apply根据documentation

      沿 DataFrame 的轴应用函数。

      幸运的是,默认轴是列,而不是行。您只需要一列,因此请让您应用的函数检查当前列。

      df.apply(lambda c: c.keys() if c.name == "col1" else c)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多