2015-11-19 2 views
2

У меня есть набор из примерно 30 столбцов, которые я хочу преобразовать в int. Эти столбцы вытягиваются как string dtype, но их нужно преобразовать в int.проблема с df.replace in pandas

Когда я делаю это

df = df[['columns','to','change']].astype(int) 

я

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

Поэтому я хочу, чтобы заменить эту строку None, а затем падение NA. Я пытаюсь это сделать.

#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 

Оба оператора печати производят 0, показывая, что строки не удалены.

Я надеюсь, что это удалит эти ценности из моего DF, но я не уверен, что я делаю неправильно?

+0

Можете ли вы использовать первые несколько строк, чтобы мы могли воспроизвести это? –

+0

'df.dropna()' - вернуть копию фрейма данных, если вы хотите сделать это внутри, вам нужно передать аргумент inplace: 'df.dropna (inplace = True)' –

ответ

1

Я понял это.

значение. Неверно.

.replace действует на серию или информационный кадр, но не индивидуальное значение.

спасибо

2

Вы можете сделать это с convert_objects:

df = df.convert_objects(convert_numeric=True) 
df.dropna(inplace=True) 

И изменит все нецифрового значение NaN автоматического

EDIT я получил предупреждение в то время как я делаю Таким образом:

FutureWarning: convert_objects устарел. Используйте специализированные преобразователи типа данных pd.to_datetime, pd.to_timedelta и pd.to_numeric.

Таким образом, вы могли бы использовать apply и pd.to_numeric методы:

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