将字典的空值替换为 NaN



我有一个缺少值的字典(键在那里,但关联的值为空(。例如,我想要下面的字典:

dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}

要更改为此形式:

dct = {'ID':NaN, 'gender':'male', 'age':'20', 'weight':NaN, 'height':'5.7'}

我怎样才能以最省时的方式编写它?

您可以使用字典理解。 同样如评论中所述,在Python中dict命名某些东西并不是好的做法。

dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
dct = {k: None if not v else v for k, v in dct.items() }
print(dct)

输出:

{'ID': None, 'gender': 'male', 'age': '20', 'weight': None, 'height': '5.7'}

只需将None替换为您希望它默认的任何内容即可。

在您的问题中,您想替换为 NaN .

您可以使用以下任一方法:

float('nan')如果您使用的是Python 2.x或Python <3.5

Python 3.5+ 的math.nan

使用numpy numpy.nan

您可以将隐式语法与布尔or表达式一起使用:

In [1]: dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
In [2]: {k: v or None for k, v in dct.items()}
Out[2]: {'ID': None, 'age': '20', 'gender': 'male', 'height': '5.7', 'weight': None}

但请注意,在 The Zen of Python 中说:

显式总比隐式好。

你可以创建一个类对象来表示NaN

class NaN:
  def __init__(self, default=None):
    self.val = default
  def __repr__(self):
    return 'NaN'
dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
new_d = {a:NaN() if not b else b for a, b in dct.items()}

输出:

{'gender': 'male', 'age': '20', 'ID': NaN, 'weight': NaN, 'height': '5.7'}
您可以使用

for 循环遍历字典中的所有键和值。

dct = {'ID': '', 'gender': 'male', 'age': '20', 'weight': '', 'height': '5.7'}

for key, value in dct.items():
      if value == '':
           dct[key] = 'NaN'
print(dct)
  1. 您使用一系列键值对创建了字典。
  2. 我使用 for 循环和 .items(( 方法来迭代字典中的每个键值对。
  3. 如果键/值对的值为空字符串,我们将该特定值更改为"NaN",其余值保持不变。
  4. 当我们打印新字典时,我们得到以下输出:

    {'ID': 'NaN', 'gender': 'male', 'age': '20', 'weight': 'NaN', 'height': '5.7'}
    

这是节省时间的,因为它是一个快速循环,只要你同意不是"NaN"值是字符串。我不确定您是否正在寻找字符串,但是,如果您正在寻找,您可以非常简单地将值从"NaN"更改为 None。for 循环在时间方面相对有效,因为它将快速迭代每个值。

最新更新