我有一组约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中移除这些值,但我不确定我做错了什么?
答案 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。
因此,您可以使用apply和pd.to_numeric方法:
df = df.apply(pd.to_numeric, args=('coerce',))
答案 1 :(得分:1)
我明白了。
value.replace不正确。
.replace作用于系列或数据框,但不是单个值。
感谢所有