def函数与astype方法的问题

问题描述 投票:0回答:1

我尝试迭代我的 df.dtypes ,当 dtypes == 'float' 时我想将其更改为 int 。

df = pd.DataFrame({'TotalRevenue':[300,9000,1000,750,500,2000,0,600,50,500], 
                   'Date':['2016-12-02' for i in range(10)], 
                   'SaleCount':[10,100,30,35,20,100,0,30,2,20], 
                   'shops':['S3','S2','S1','S5','S4','S8','S6','S7','S9','S10']})
def myFunc(df):
  for el in range(0, len(df.dtypes)):
    if df.dtypes[el] == 'float64':
      df = df.astype({df.columns[el] : 'int64'})
  return df.dtypes

myFunc(df)      

一切都工作正常,代码返回正确的数据类型

TotalRevenue     int64
Date            object
SaleCount        int64
shops           object
dtype: object

但是当我在笔记中写下 df.dtypes 时,没有任何变化

TotalRevenue    float64
Date             object
SaleCount         int64
shops            object
dtype: object
python function
1个回答
0
投票

首先,您提供的数据中没有浮点值(因此没有列浮点数据类型)。但是假设有

TotalRevenue
那么你不能使用你的方法设置为 int64 dtype(你不是 using 从函数返回的值,如果你确实使用它来设置 dtypes 那么它会导致错误)。您需要做的是选择具有“错误”数据类型的列并更改这些:

使用面膜:

m = df.select_dtypes('float64').columns

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

或者如果你想使用循环:

for column in df.columns:
    if df[column].dtype == 'float64':
        df[column] = df[column].astype('int64')
© www.soinside.com 2019 - 2024. All rights reserved.