在熊猫中使用df.replace会遇到麻烦

时间:2015-11-19 04:10:34

标签: python pandas replace

我有一组约30列要转换为int。这些列作为字符串dtype被拉入,但需要转换为int。

当我这样做时

ValueError: invalid literal for long() with base 10: '\xe2\x80\xa0'

我得到了

#there are some funky values in some columns that should have numbers.  Lets trash them
starting_row_count = len(df.index)
df.dropna()
current_row_count = len(df.index)
print current_row_count - starting_row_count

def strip_it(value):
   #culls rotten values
    if type(value) == str:
        value.replace('\xe2\x80\xa0', None)
        value.replace('"', None)
        value.replace('=', None) 
    return value

df = df.astype(str)

df = df.apply(strip_it)

df.dropna()
current_row_count = len(df.index)
print current_row_count - starting_row_count

所以我想用None替换该字符串,然后删除NA。我正在尝试这个。

{{1}}

两个print语句都生成0,表示没有删除任何行。

我希望这会从我的DF中移除这些值,但我不确定我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用convert_objects

执行此操作
df = df.convert_objects(convert_numeric=True)
df.dropna(inplace=True)

并且它会将所有非数字值更改为NaN自动

修改 我这样做的时候发出了警告:

  

FutureWarning:不推荐使用convert_objects。使用特定于数据类型的转换器pd.to_datetime,pd.to_timedelta和pd.to_numeric。

因此,您可以使用applypd.to_numeric方法:

df = df.apply(pd.to_numeric, args=('coerce',))

答案 1 :(得分:1)

我明白了。

value.replace不正确。

.replace作用于系列或数据框,但不是单个值。

感谢所有