【问题标题】:Key is shown as nan in dictionary python键在字典 python 中显示为 nan
【发布时间】:2019-07-18 17:35:45
【问题描述】:

我正在尝试将具有 2 列的数据框转换为字典,其中第一列是键,第二列是一个字典中的所有值。

数据样本:

id           summary
135791059    blha blah blah
135791051    blah something blah

这是我尝试过的代码

map_of_values = pd.Series(f_dataframe.summary.values,index=f_dataframe.id).to_dict()

print(map_of_values)

输出是:

{'id': {'blah blah blah': nan, 'blah something blah}

我希望它是:

 {135791059:'blah blah blah blah',135791051:'blah something blah'}

我做错了什么?而且我还想迭代每个键值对,从中构建一个字符串。这是正确的方法吗?

【问题讨论】:

  • d=dict(df.values) 如果id 是一列,你也可以尝试dict(zip(df.id,df.summary)) 其中df 是数据框的名称
  • 我似乎无法用您提供的样本重现您的问题;我得到{100: 'blha blah blah', 200: 'blah something blah'}
  • 编辑:我保留了我正在尝试的 id 值。我仍然得到与以前相同的结果。
  • 谢谢大家的回答。但在代码中,我在将数据帧转换为字典之前对其进行了一些处理。这导致删除了 id 字段中的所有值。对不起,这是我的错!

标签: python pandas dictionary


【解决方案1】:

您可以简单地使用以下代码:

df.set_index('id').to_dict()['summary']

【讨论】:

  • 同样的问题。键显示为 nan。
【解决方案2】:

尝试了您的解决方案,如下所示。

工作正常。无法重现错误。也许您想检查您创建的数据框。

f_dataframe= {'id':[135791059,135791051],
        'summary':["blha blah blah", "blah something blah"]}
df = pd.DataFrame(f_dataframe)

map_of_values = df.set_index('id').to_dict()['summary']
print(map_of_values)

【讨论】:

    【解决方案3】:
    • df.to_dict() 方法用于根据orient 参数将数据帧转换为系列字典或类似列表的数据类型。
    • orient - 字符串值,('dict', 'list', 'series', 'split', 'records', 'index') 定义将列(系列转换为)的 dtype。

    例如

    import pandas as pd
    
    my_dict = {'id':[135791059,135791051],'summary':["blha blah blah", "blah something blah"]}
    df = pd.DataFrame(my_dict)
    print(df)
    records = df.to_dict('records')
    data = {i['id'] :i['summary'] for i in records}
    print(data)
    

    O/P:

              id              summary
    0  135791059       blha blah blah
    1  135791051  blah something blah
    
    {135791059: 'blha blah blah', 135791051: 'blah something blah'}
    

    【讨论】:

      【解决方案4】:

      如果您已经将值用作列,则通常会发生此问题。如果您有一个现有列并且想要将一些“键”归因于值并创建一个新列,它将显示为NaN。您需要将现有列用作“键”,将所需的新列用作“值”(只需在字典中切换键和值的位置)。

      例如:您预先存在的列是摘要,而您当前的 dict 是:

      d = {135791059: 'blah blah blah', 135791051: 'blah something blah'}
      

      但是,您需要像这样更正它:

      d = {'blah blah blah': 135791059: , 'blah something blah': 135791051}
      

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 2018-10-07
        • 2017-01-25
        • 1970-01-01
        • 2014-01-24
        • 2022-08-22
        • 2017-06-15
        • 1970-01-01
        相关资源
        最近更新 更多