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

时间:2017-01-11 12:23:13

标签: python pandas

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

4 个答案:

答案 0 :(得分:6)

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

int才有效。

答案 1 :(得分:4)

您可以按reindex按排序列使用sort_valuesastype投射到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)strcategory

对于多种数据类型更改,我建议以下内容:

df = pd.read_csv(data, dtype={'Col_A': str,'Col_B':int64})