【问题标题】:Applying the conversions in the converters dictionary after a DataFrame has been created in Python在 Python 中创建 DataFrame 后应用转换器字典中的转换
【发布时间】:2021-01-14 03:13:37
【问题描述】:

我有以下行,它读取 CSV 并按预期创建应用我的自定义转换器的数据框:

csv_file_raw = read_csv(f'{directory}\{filename}', converters=converters)

但是,我希望从数据框中删除所有空白行,这是在创建数据框后使用以下行完成的:

csv_file = csv_file_raw.dropna(how="all")

我现在的问题是转换器已将一些值解析为空字符串,dropna 函数不会将其解释为“N/A”值。

如果我没有像这样在read_csv 函数中包含转换,则会删除空白行:

csv_file_raw = read_csv(f'{directory}\{filename}')
csv_file = csv_file_raw.dropna(how="all")

现在我已经删除了空行,有没有一种简单的方法可以将转换器字典应用到数据框,或者只能在最初从 CSV 读取它时实现?

【问题讨论】:

    标签: python dataframe converters


    【解决方案1】:

    将所有空字符串替换为np.NaN,然后使用dropna

    csv_file_raw = read_csv(f'{directory}\{filename}', converters=converters)
    csv_file = df.replace(r'^\s*$', np.NaN, regex=True).dropna(how="all")
    

    例子

    df = pd.DataFrame({'c1': ["1", "", np.NaN], 'c2': ["1", "", "2"]})
    print (df)
    df = df.replace(r'^\s*$', np.NaN, regex=True).dropna(how="all")
    print (df)
    

    输出:

        c1 c2
    0    1  1
    1        
    2  NaN  2
    
        c1 c2
    0    1  1
    2  NaN  2
    

    【讨论】:

    • 那不是颠倒了转换器的工作吗?我只想删除完全空行,同时保留已应用的转换
    • 没有。您首先运行转换器,转换器产生的所有空字符串将被 NaN 替换(我假设转换器不会影响已经存在的 NaN),最后删除所有 NaN。还有其他方法可以做到这一点,但这与你已经拥有的很接近。
    • 是的,一些现有的 NaN 在某些列中被转换为空字符串
    猜你喜欢
    • 2021-12-23
    • 2016-10-16
    • 1970-01-01
    • 2016-05-26
    • 2017-09-08
    • 2019-02-06
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多