【问题标题】:dataframe has a column as dictionary.How to convert it in columns? [duplicate]数据框有一列作为字典。如何将其转换为列? [复制]
【发布时间】:2019-08-11 14:39:40
【问题描述】:

下面的 Df 具有包含名称、性别和 net_salary 的字典的列。字典有许多列及其对应的值。我需要将该字典转换为列形式。

 index    columns
 9        {"name": "namo     ", "gender": "MALE", "net_salary":...
 10       {"name": "pappu", "gender": "MALE", "net_salary":...
 11       {"name": "Deepak", "gender": "MALE", "net_sala...
 12       {"name": "Arun", "gender": "MALE", "net_salary...
                                                       {}

我想以这种形式输出。

 index    name    gender       net_salary
 9        namo     MALE          151515
 10       pappu    MALE          151454
 11       Deepak   MALE          42512
 12       Arun     MALE          51654

【问题讨论】:

  • pd.DataFrame.from_dict

标签: python pandas dictionary data-science


【解决方案1】:

您需要先对包含 dicts 的列进行切片,然后为这些 dicts 创建一个新的数据框。

columnsList = list(dframe["columns"])
sub_dframe = pd.DataFrame(columnsList)
result = pd.concat([dframe["index"],sub_dframe], axis=1)

【讨论】:

  • 如果两个 df 没有可合并的共同值,这将如何工作?
  • @mad_ 哦,我的错。我混淆了合并和连接。
【解决方案2】:

你需要:

df = pd.DataFrame({'columns': [{"name": "namo", "gender": "MALE", "net_salary":151515}, 
                           {"name": "pappu", "gender": "MALE", "net_salary":151454}]}, index=[9,10])


print(df['columns'].apply(pd.Series))

输出:

    name gender  net_salary
9   namo   MALE      151515
10  pappu   MALE      151454

【讨论】:

    【解决方案3】:

    我会做这样的事情(python 3):

    df["name"] = [*map(lambda x: x["name"],df["columns"])]
    df["gender"] = [*map(lambda x: x["gender"],df["columns"])]
    df["salary"] = [*map(lambda x: x["net_salary"],df["columns"])]
    

    如果它打扰您,您可以删除原始列。

    【讨论】:

    • TypeError: 字符串索引必须是整数
    • 奇怪,我没有得到这个错误,使用复制你的例子的 df。也许你以不同的方式构建了 df。
    【解决方案4】:

    一个清晰的解决方案可能是

    pd.concat([df,df['columns'].apply(pd.Series)],axis=1).drop('columns',axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2021-01-08
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多