更改pandas数据帧的特定列的数据类型

Dou*_*ger 7 python pandas

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

Jim*_*age 8

df['colname'] = df['colname'].astype(int)从float值更改为int至少时工作.


use*_*120 7

我试过以下:

df['column']=df.column.astype('int64')
Run Code Online (Sandbox Code Playgroud)

它对我有用。


jez*_*ael 5

您可以使用reindexby 排序列 by sort_values,转换为intby 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
Run Code Online (Sandbox Code Playgroud)

如果第一个解决方案由于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
Run Code Online (Sandbox Code Playgroud)