【问题标题】:How to replace NaN from Dictionary in python如何在python中从字典中替换NaN
【发布时间】:2019-03-16 14:39:25
【问题描述】:

我有以下代码:

my_dataset={'item1':{'item11':0,'item12':'NaN','item13':2},'item2':{'item21':0,'item22':'NaN','item23':2}}
my_dataset_clean=my_dataset
for item in my_dataset:
     my_dataset_clean[item] = {k: 0 for k in my_dataset[item] if isnan(my_dataset[item][k])}

我收到此错误:

my_dataset_clean[item] = {k: 0 for k in my_dataset[item] if isnan(my_dataset[item][k])} TypeError: must be real number, not str

关于如何解决这个问题的任何想法?我想用 0 替换 NaN

【问题讨论】:

    标签: python dictionary for-loop nested nan


    【解决方案1】:

    您需要检查'NaN' 作为字符串,而不是使用需要数值的isnan(可能是np.isnan)。但还有几点值得注意:

    1. 你没有定义当你的值是 not 'NaN' 时会发生什么。没有这个,您将丢失其他物品。请参阅下文,了解如何定义三元语句。
    2. my_dataset_clean = my_dataset 不会创建字典的副本。你需要明确,例如my_dataset_clean = my_dataset.copy(),这样做。否则你只有 2 个变量指向同一个字典。
    3. 您可以使用字典理解来避免复制字典。

    这里有一个字典理解和三元语句的例子:

    my_dataset_clean = {k: {k2: 0 if v2 == 'NaN' else v2 for k2, v2 in v.items()} \
                        for k, v in my_dataset.items()}
    

    这里k, v指的是外部字典中的键/值,k2, v2指的是内部字典中的键/值。

    【讨论】:

    • 非常感谢您的 3 点。您的示例正是我想要实现的目标
    【解决方案2】:

    'NaN' 在您的字典中是一个字符串。而不是isnan,您可以使用字符串比较:my_dataset[item][k] == 'NaN'

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2023-01-24
      • 2019-02-23
      • 2016-06-29
      • 2017-02-23
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多