【问题标题】:List comprehension that ignores NaN忽略 NaN 的列表理解
【发布时间】:2018-02-23 06:41:54
【问题描述】:

我正在尝试构建一个列表理解,它有条件不导入 nan 值,但没有运气。下面是当前代码以及结果输出。什么条件会从列表中删除 nans?

def generate_labels(filtered_df, columnName):
    return[
        {'label': i, 'value': i} for i in 
        filtered_df[columnName].unique() 
    ]

generate_labels(df, 'Region')


#Output  


[{'label': 'Americas', 'value': 'Americas'},
     {'label': 'EMEA', 'value': 'EMEA'},
     {'label': nan, 'value': nan},
     {'label': 'APAC ', 'value': 'APAC '}]

【问题讨论】:

  • 这是字典理解。
  • filtered_df[columnName].dropna().unique() ?
  • @Steve ,请参阅末尾的括号。
  • @Maksim 我现在这样做。字典的经典列表。我不应该错过的。

标签: python pandas


【解决方案1】:
def generate_labels(filtered_df, columnName):
    return[
        {'label': i, 'value': i} for i in filtered_df[columnName].dropna().unique() 
    ]

【讨论】:

    【解决方案2】:

    您可以在列表理解表达式中添加条件。比如:

    import math
    
    def generate_labels(filtered_df, columnName):
        return[
            {'label': i, 'value': i} for i in 
            filtered_df[columnName].unique() 
            if not math.isnan(i)
        ]
    

    有多种方法可以检查值是否为 nan。如果您愿意,也可以使用 numpy 版本。

    【讨论】:

    • 你实际上不需要math,pandas 已经用 numpy 内置了它:pd.np.isnan(i)
    • @Idlehands 好点子,我们有多种方法可以做到,如果已经加载了 pandas,我们不需要加载另一个库可能更简单。
    猜你喜欢
    • 2017-10-23
    • 2020-10-08
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多