2017-01-11 6 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に変換できません。 'NaN'は' int'で表現できません。 – EdChum

+0

または 'int'のみに変換する必要がありますソートしてから 'string'(' object')に変換しますか? – jezrael

答えて

2

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に変更すると機能します。

あなたが astypeによって intにキャスト、 sort_valuesによってソート列で reindexを使用することができます
関連する問題