处理pandas数据帧中空白/空字符串的最佳方法

时间:2018-02-13 19:40:32

标签: python pandas

我的问题是一种普遍的问题。我有一个数据框,在许多列中有许多空/空字符串,带有dtype对象。我应该原样离开还是将它们转换为np.nan。我通常做的是用np.nan替换那些空字符串。这是一个好习惯吗?谢谢你的建议。

1 个答案:

答案 0 :(得分:0)

我也遇到过同样的问题。 dataFrame中的空单元不一定必须是none类型,实际上,大多数时候它可以是以下类型之一:str类型的“”,“”,“”,“”。这种情况尤其在您在dataFrames中执行并行语料库过滤或预处理任务时发生。无论如何,我在网络上发现了许多解决方案,其中一个解决方案是python的一个非常漂亮的功能,但不适用于dataFrames。但我会提一下。
由于空列表将返回False,例如:

if an_object == list

字符串也是如此:

if a_str_obj == str

但是,由于它不适用于dataFrame,因此,除非有循环选项,否则-我无法想象为什么有人会这样做而不是实现python的强大功能。

一种方法是,您可以使用使用lambda的字符串内置函数来创建函数。这是代码:

def is_empty(a_str):
    if a_str.strip() == '':
        return 1
    else:
        return 0 

df["is_empty"] = df["str_field"].apply(lambda x: is_empty(x]))

关于为什么我不同意在dataFrames中使用foor循环而倾向于使用的说明
lambda,即使它不是最有效的方法:
我对长度= 100 dataFrame进行了时序测试。
计时结果如下:
使用lambda:
每个循环4.68 ms±79 µs(平均±标准偏差,共运行7次,每个循环100个)
使用循环
每次循环16.3 ms±38.8 µs(平均±标准偏差,共运行7次,每个循环100次)

或者,如果您关心效率,可以使用地图功能,该功能快得多。 在这里:

a = list(map(is_empty, df["str_field"].values))
c = list(map(bool, a))
df[c]["is_empty"] = 1

它产生:
每个回路889 µs±22.2 µs(平均±标准偏差,共运行7次,每个回路1000个)