2017-01-11 2 views
2

Я хочу, чтобы сортировать фреймворк данных со многими столбцами по определенному столбцу, но сначала мне нужно изменить тип от object до int. Как изменить тип данных этого конкретного столбца при сохранении исходных позиций столбца?Изменить тип данных для конкретного столбца в dataframe pandas

+0

ли posiible использования 'df ['colname'] = df ['colname']. astype (int)'? – jezrael

+0

Вы пытались найти это: http://stackoverflow.com/search?tab=votes&q=pandas%20convert%20to%20int есть много связанных вопросов. Это также сильно зависит от текущего состава ваших данных, например, если у вас отсутствуют значения, то вы не можете преобразовать в int, поскольку 'NaN' не может быть представлен' int' – EdChum

+0

Или вам нужно преобразовать только в 'int' для сортировки, а затем конвертировать обратно в 'string' (' object')? – jezrael

ответ

2

Вы можете использовать reindex по отсортированным колонкам sort_values, отлитый в int по astype:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'colname':['7','3','9'], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (df) 
    A B D E F colname 
0 1 4 1 5 7  7 
1 2 5 3 3 4  3 
2 3 6 5 6 3  9 

print (df.colname.astype(int).sort_values()) 
1 3 
0 7 
2 9 
Name: colname, dtype: int32 

print (df.reindex(df.colname.astype(int).sort_values().index)) 
    A B D E F colname 
1 2 5 3 3 4  3 
0 1 4 1 5 7  7 
2 3 6 5 6 3  9 

print (df.reindex(df.colname.astype(int).sort_values().index).reset_index(drop=True)) 
    A B D E F colname 
0 2 5 3 3 4  3 
1 1 4 1 5 7  7 
2 3 6 5 6 3  9 

Если первое решение не работает, потому что None или плохие данные используют to_numeric:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'colname':['7','3','None'], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (df) 
    A B D E F colname 
0 1 4 1 5 7  7 
1 2 5 3 3 4  3 
2 3 6 5 6 3 None 

print (pd.to_numeric(df.colname, errors='coerce').sort_values()) 
1 3.0 
0 7.0 
2 NaN 
Name: colname, dtype: float64 
2

df['colname'] = df['colname'].astype(int) Работы при изменении от float значений до int по крайней мере.

Смежные вопросы