AttributeError:' NoneType'对象没有属性' lstrip'

时间:2016-05-10 17:01:07

标签: python pandas

我在Pandas中有一个数据框,当我尝试剥离某些字符时,它会给我以下错误:

  

AttributeError:' NoneType'对象没有属性' lstrip'

我开始删除任何缺失或空值:

df_sample1['counties'].fillna('missing')

检查它,我看到很多不干净的数据,实际数据的混合(县1,计数2 ...计数n)以及乱码($%ZYC 2)。

为了进一步清理,我运行了以下代码:

df_sample1['counties'] = df_sample1['counties'].map(lambda x: x.lstrip('+%=/-#$;!\(!\&=&:%;').rstrip('1234567890+%=/-#$;!\(!\&=&:%;'))
df_sample1[:10]

这会生成' NoneType'错误。 我挖了一点,在Pandas文档中,有一些关于跳过缺失值的提示。

if df_sample1['counties'] is None:
    pass 
else:
   df_sample1['counties'].map(lambda x: x.lstrip('+%=/-#$;!\(!\&=&:%;').rstrip('1234567890+%=/-#$;!\(!\&=&:%;'))

这仍然会生成上面提到的NoneType错误。有人能指出我做错了吗?

3 个答案:

答案 0 :(得分:1)

你可以"跳过" None通过在执行剥离之前检查x是否真实...

df_sample1['counties'].map(lambda x: x and x.lstrip('+%=/-#$;!\(!\&=&:%;').rstrip('1234567890+%=/-#$;!\(!\&=&:%;'))

这可能会在数据框中留下一些None(在之前的相同位置),但转换应该仍然适用于字符串。

答案 1 :(得分:1)

如果您正在处理文本数据,为什么不首先使用空字符串填充无类型数据?

defaultConfig {
    testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
}

答案 2 :(得分:1)

我怀疑您的问题是,当您填写缺失的值时,您没有在原地进行此操作。这可以通过以下方式解决:

df_sample1['counties'].fillna('missing', inplace=True)

或者,在应用pandas.Series.map时,您可以使用参数na_action将这些条目保留为None

df_sample1['counties'] = df_sample1['counties'].map(lambda x: ..., na_action='ignore')