首页 > 解决方案 > Python:通过索引多列将 int64 更改为 float64

问题描述

虽然我发现了很多关于按名称更改单个列或几列的数据类型的事情,但我很难找到有关更改许多列而不键入所有特定名称的任何内容。

我想将所有 int64 更改为 float64 而无需手动指定所有 60 列。我发现了这个:

df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

但是创建一个列表,例如:column_list = list(df[6:]) 甚至似乎都没有给出从第 7 列开始的列表。

标签: python-3.xpandaslistdataframe

解决方案


使用DataFrame.iloc, 首先:意味着选择所有行,其次是所有列按第 7 列分层:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'E':['a',5,4,5,5,4],
         'F':[7,'a',9,4,2,3],
         'G':[1,3,5,7,1,0],
         'H':[4,5,'a',5,5,4],
         'I':[7,8,9,4,2,3],
         'J':[1,3,5,'a',1,0],
         'K':[5,'a',6,9,2,4]
})

print (df.dtypes)
A    object
B     int64
C     int64
D     int64
E    object
F    object
G     int64
H    object
I     int64
J    object
K    object
dtype: object

df.iloc[:, 6:] = df.iloc[:, 6:].apply(pd.to_numeric, errors='coerce', downcast='float')

print (df.dtypes)
dtype: object
A     object
B      int64
C      int64
D      int64
E     object
F     object
G    float64
H    float64
I    float64
J    float64
K    float64
dtype: object

如果所有值都是整数:

df.iloc[:, 6:] = df.iloc[:, 6:].astype(np.float64)

推荐阅读