2017-01-11 140 views
2

我想按特定列对多列数据框进行排序,但首先需要将类型从object更改为int。如何在保留原始列位置的同时更改此特定列的数据类型?更改熊猫数据帧特定列的数据类型

+0

是posiible使用'df ['colname'] = df ['colname']。astype(int)'? – jezrael

+0

你尝试过搜索这个:http://stackoverflow.com/search?tab=votes&q=pandas%20convert%20to%20int有很多相关的问题。它也很大程度上取决于当前数据的组成,例如,如果缺少值,则无法将int转换为int,因为'NaN'不能用'int'表示。 – EdChum

+0

或者只需要将其转换为int排序然后转换回'string'('object')? – jezrael

回答

2

您可以通过排序列由sort_values,转换为intastype使用reindex

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 atleast。