我想按特定列对包含许多列的数据框进行排序,但首先我需要将类型从object
更改为int
。如何在保留原始列位置的同时更改此特定列的数据类型?
答案 0 :(得分:6)
df['colname'] = df['colname'].astype(int)
值更改为float
时, int
才有效。
答案 1 :(得分:4)
您可以按reindex
按排序列使用sort_values
,astype
投射到int
:
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 :(得分:2)
我试过以下:
df['column']=df.column.astype('int64')
它对我有用。
答案 3 :(得分:0)
要只更改一列,可以执行以下操作:
df.column_name.apply(int)
您可以将int
替换为所需的所需数据类型,例如(np.int64)
,str
,category
。
df = pd.read_csv(data, dtype={'Col_A': str,'Col_B':int64})