【问题标题】:How to handle non-numeric entries in an integer valued column如何处理整数值列中的非数字条目
【发布时间】:2016-08-31 23:46:58
【问题描述】:

我有一个数据框df,其中一列count 包含字符串。这些字符串大部分都可以转换为整数(例如0006),这就是我将对它们进行的操作。但是count 中的一些条目是空白的空格字符串。我该怎么做

  • 删除所有count 值为空字符串的行。
  • 用我选择的某个数值替换该列中的所有空白值。

如果有特别有效的方法,数据框会非常大。

【问题讨论】:

  • 所以你想做两件不兼容的事情,对吧?一旦你删除了空白值,那么替换空白值就没有意义了......
  • 是的,它们本来是两个不同的选择。

标签: python pandas


【解决方案1】:

看来你想要两种不同的东西。但首先,转换列to numeric 并强制错误:

df['count'] = pd.to_numeric(df['count'], errors='coerce')

要删除行(使用subset 以避免从其他列中删除NaN):

df.dropna(subset=['count'])

用默认值替换:

df['count'] = df['count'].fillna(default_value)

【讨论】:

    【解决方案2】:

    pd.to_numeric(errosr='coerce') 之后使用dropnafillna

    考虑一个熊猫系列s

    s = pd.Series(np.random.choice(('0001', ''), 1000000), name='intish')
    

    drop 方法 1(不太稳健)

    s[s != ''].astype(int)
    

    drop 方法 2(更健壮)

    pd.to_numeric(s, 'coerce').dropna().astype(int)
    

    丢弃时机

    更健壮的方法速度更快


    填充方法一

    pd.to_numeric(s, 'coerce').fillna(0).astype(int)
    

    填充方法二

    s.where(s.astype(bool), 0).astype(int)
    

    填充时间

    花费与掉落相同的时间

    【讨论】:

    • 从技术上讲,您还应该在填充案例中转换为int :)
    • 谢谢。一个细节是我的空白字符串不是空的。我需要使用 .strip 我认为它们是可变数量的空格。
    • s.str.strip() 应该这样做。
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2020-01-29
    • 2013-05-30
    • 1970-01-01
    • 2013-02-24
    • 2012-12-03
    • 2013-12-24
    相关资源
    最近更新 更多