修改pandas数据框中特定列的数据类型

21

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


2
可以使用 df['colname'] = df['colname'].astype(int) 吗? - jezrael
或者你只需要将其转换为 int 进行排序,然后再转换回 string (object)? - jezrael
@jezrael 没问题。排序后我需要再转换回去。 - DougKruger
@DougKruger - df['colname'] = df['colname'].astype(int) 这段代码能正常工作还是会出现错误? - jezrael
它可以工作。我收到了这个警告:“正在尝试在DataFrame的切片副本上设置值。 尝试使用.loc [row_indexer,col_indexer] = value代替”。如何抑制它? - DougKruger
5个回答

36

df['colname'] = df['colname'].astype(int) 可以将float类型的数据转换为int类型。


这对我很有用。我遇到了这个问题,所有我找到的答案都显得过于复杂,感谢这个简单的答案 :) - Reed Jones

12

我已经尝试过以下方法:

df['column']=df.column.astype('int64')

而且它对我起作用了。


7

您可以通过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
简单更改一列的方法如下: df.column_name.apply(int) 您可以将int替换为所需的数据类型,例如(np.int64)strcategory
对于多个数据类型更改,我建议使用以下方法: df = pd.read_csv(data, dtype={'Col_A': str,'Col_B':int64}) "Original Answer"翻译成中文是"最初的回答"。

1
文本翻译:文档提供了所有所需信息。让我们从文档中获取玩具数据框:
d = {'col1': [1, 2], 'col2': [3, 4]}

如果我们想要将col1转换为int32,我们可以使用字典,例如:
df.astype({'col1': 'int32'})

此外,上述方法可以避免出现SettingWithCopyWarning警告。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接