如何在Python中使用Pandas Astype函数

583 阅读13分钟

在本教程中,我将解释如何使用Pandas astype函数来修改Pandas数据框架列和Pandas对象的数据类型。

我将解释该技术的作用,解释语法,并向你展示一步步的例子。

如果你需要特定的东西,你可以点击以下任何一个链接。

目录。

让我们先快速介绍一下astype技术的作用。

Pandas Astype的快速介绍

Pandas astype方法可以修改Pandas对象的数据类型。

通常,我们使用这个工具来修改数据框架的列的数据类型。

但也有一些其他的使用方法,我将在实例部分介绍。

最常见的是,我们在Python中清理数据集时使用这个技术,尽管在数据科学工作流程的其他部分,这个工具也有潜在的其他用途。

A simple image that shows how the Pandas astype method changes the datatype of Pandas dataframes or Series objects.

你可以用几种不同的方式使用Pandas astype技术。

我们可以用这个工具来改变数据类型。

  • 一个潘达斯系列
  • 潘达斯数据框架的单列
  • 数据框架的多列

我将在例子部分向你展示每一种的例子。

但首先,让我们看一下语法。

潘达斯Astype的语法

在这里,我们将看一下Pandasastype() 技术的语法。

由于你可以在数据框和系列对象上使用astype技术,我们将看一下它的语法。

简短说明

在我们看语法之前,我只想提醒你,本语法部分的其他内容都假定你已经导入了Pandas,并且你已经有了Pandas数据框架或系列。

你可以像这样导入Pandas。

import pandas as pd

并且有多种方法来创建或导入数据框架。 要了解更多关于数据框架的信息,你可以阅读我们关于Python数据框架的教程

语法:在一个系列上使用 astype

首先,让我们看看如何在Pandas系列上使用astype。

要调用一个系列的方法,只需输入系列的名称,然后使用 "点语法 "来调用astype() 方法。

An image that explains how to use the Pandas astype method on a Pandas Series.

在括号内,你提供数据类型的名称。 数据类型的名称应该被括在引号内。 例如,astype('int16')

语法:在数据框架列上使用astype

接下来,让我们看看如何在Python数据框架上使用astype。

首先,你要输入数据框架的名称,然后使用 "点语法 "来调用astype() 方法。

但是在括号内,我们将提供一个字典,而不是提供一个单一的值作为参数。

An image that shows the syntax for how to use the Pandas astype method on a Python dataframe.

在字典里面,你提供列名,以及你想用于该列的数据类型。

An image that shows the dictionary argument to the astype function, which lets you change the datatype of a specific dataframe column.

你可以用它来改变一个单一的数据框架列的数据类型。

但是你可以用它来改变多个列的数据类型。 如果你想对多个列进行操作,只需提供几个列/数据类型对,用逗号分隔,像这样。

your_dataframe.astype({'column1':'datatype', 'column2':'datatype'})

这种语法使你可以同时对多个数据框架列进行操作。

当你有几个变量需要修改的时候,这对于数据清理非常有用。

Pandas astype的参数

现在,让我们来看看astype函数的一些参数。

  • dtype
  • copy
  • errors
dtype (必填)

dtype 参数使你可以指定数据类型。

如果你提供一个单一的数据类型,它将尝试将该数据类型应用于整个对象。 如果你在一个系列上操作,它将把该系列转换为特定的数据类型。 但是如果你在一个数据框架上操作,它将尝试把每个变量转换为该数据类型(这可能会导致错误)。

另外,如果你在一个数据框架上操作,你可以提供一个字典作为这个参数的参数。 如语法部分所示,如果你使用这种风格的语法,你可以提供一个列/数据类型对的字典。

copy

copy 参数指定astype 方法是否返回对象的副本,或者直接在原始对象上操作。

默认情况下,这个参数被设置为copy = True 。这意味着默认情况下,该方法将返回一个新的对象(即,一个新的数据框架),并保持原始对象不变。

如果你设置了copy = False ,要小心,因为它将直接覆盖你的数据集。 如果你这样做,你需要确保你的代码完全按照预期工作。

errors

errors 参数指定了如果你试图对对象应用不合适或无效的数据类型,该技术是否会引发一个异常。

这方面有两种可能的rugment是。

  • raise (如果有问题,将引发一个异常)
  • ignore (如果有问题,将抑制异常)。如果有一个错误,将返回原始对象)

默认情况下,这被设置为raise = True

Pandas astype的输出

默认情况下,astype方法将返回一个新对象。

如果你对一个系列进行操作,它将返回一个系列(带有修改的数据类型)。

如果你对一个数据框架进行操作,它将返回一个数据框架(带有修改后的数据类型)。

例子。如何改变Python数据框架中的数据类型

现在我们已经看了Python astype函数的语法,让我们看一些例子。

例子。

先运行这段代码

在你运行这些例子之前,你需要。

  • 导入必要的包
  • 获取示例数据框架

让我们逐一进行。

导入必要的包

首先,我们需要导入Pandas。

你可以用下面的代码来做。

import pandas as pd

创建示例数据框架

接下来,我们需要创建我们将要使用的示例数据集。

我们将用Pandas DataFrame函数建立数据集,但要为它提供一个列名字典,以及一些我们希望变量包含的数据的列表。

sales_data = pd.DataFrame({"name":["William","Emma","Sofia","Markus","Edward","Thomas","Ethan","Olivia","Arun","Anika","Paulo"]
                           ,"region":["East","North","East","South","West","West","South","West","West","East","South"]
                           ,"sales":[50000,52000,90000,34000,42000,72000,49000,55000,67000,65000,67000]
                           ,"expenses":[42000,43000,50000,44000,38000,39000,42000,60000,39000,44000,45000]
                           }
                          ,dtype = 'object'
                          )

我们还将创建一个Pandas系列对象,它只包含数据框架中的支出变量。

expenses_variable = sales_data.expenses

让我们打印出数据框架,这样我们就可以看到内容了。

print(sales_data)

输出。

       name region  sales expenses
0   William   East  50000    42000
1      Emma  North  52000    43000
2     Sofia   East  90000    50000
3    Markus  South  34000    44000
4    Edward   West  42000    38000
5    Thomas   West  72000    39000
6     Ethan  South  49000    42000
7    Olivia   West  55000    60000
8      Arun   West  67000    39000
9     Anika   East  65000    44000
10    Paulo  South  67000    45000

你可以看到4个变量。

  • name
  • region
  • sales
  • expenses

因此,该数据框架包含了四个不同地区的几个销售人员的虚拟销售和费用数据。

检查数据类型

让我们快速查看一下数据类型。

sales_data.dtypes

OUT。

name        object
region      object
sales       object
expenses    object
dtype: object

现在,所有的变量都有object 数据类型。

我们要改变其中的大部分。

实例1:改变潘达斯系列的数据类型

让我们从最简单的开始。

在这里,我们将在一个潘达斯系列上使用astype()

在我们创建数据框架的部分,我们也将其中一个变量分离出来,变成一个名为expenses_variable 的系列。

检查初始数据类型

首先,让我们检查一下原始数据类型。

expenses_variable.dtype

OUT。

dtype('O')

这告诉我们该系列具有 "对象 "数据类型。

改变数据类型

现在,我们将使用Pandas astype来改变数据类型为int32

expenses_variable.astype('int32')

输出。

0     42000
1     43000
2     50000
3     44000
4     38000
5     39000
6     42000
7     60000
8     39000
9     44000
10    45000
Name: expenses, dtype: int32

解释

如果你仔细看一下输出的底部,你会发现输出的数据类型是dtype: int32

请记住:这并没有直接改变expenses_variableexpenses_variable 系列本身仍然具有 "对象 "数据类型,因为astype() 的输出被发送到了控制台。

如果我们想直接改变数据,永久地改变,我们需要用代码把输出重新分配回原来的变量名。

 
expenses_variable = expenses_variable.astype('int32')

实例2:改变数据框架中一列的数据类型

现在,让我们对数据框架内的一列进行操作。

这与例1有点不同,在例1中我们操作的是Pandas系列。

在这里,我们将对一个数据框架进行操作,为了做到这一点,语法将略有不同。

检查初始数据类型

首先,让我们检查一下原始数据类型。

sales_data.dtypes

OUT。

name        object
region      object
sales       object
expenses    object
dtype: object

你会注意到,所有的列都有object 数据类型。

改变数据类型

在这里,我们将使用Pandas astype来改变sales 列的数据类型。

(我们还将使用.dtypes 属性来查看输出的数据类型)。

sales_data.astype({'sales':'int32'}).dtypes

输出。

name        object
region      object
sales        int32
expenses    object
dtype: object

解释

请注意,在输出中,sales 的数据类型已经被改变为int32

为了做到这一点,我们调用了astype ,并提供了一个 dictionary 作为参数。

dictionary 的左边是列的名称,右边是新的数据类型。

当我们使用 astype 对一个完整的数据框架进行操作时,我们可以使用这种语法风格,我们提供一个字典,其中包含列和数据类型的对,形式是{'column':'data-type'}

实例3:改变一个数据框架中多个变量的数据类型

现在,让我们来修改一个数据框架中多个列的数据类型。

如何完成这个任务将与我们在例子2中修改一列的方法非常相似(我们将不得不使用另一个字典)。

检查初始数据类型

同样,在我们执行操作之前,让我们检查一下原始数据类型。

sales_data.dtypes

OUT。

name        object
region      object
sales       object
expenses    object
dtype: object

再次注意到,所有的列都有object 的数据类型。

改变数据类型

现在,我们将改变多个列的数据类型。

要做到这一点,我们将使用一个字典,把变量的名称和数据类型作为我们字典的'key':'value' 对。

(我们还将在astype 操作之后调用.dtypes 属性,这样我们就可以看到新的数据类型)

sales_data.astype({'region':'category'
                   ,'sales':'int32'
                   ,'expenses':'int32'
                   }
                  ).dtypes

输出。

name          object
region      category
sales          int32
expenses       int32
dtype: object

解释

注意在输出中,有3列的数据类型已经被改变。

  • region 被改成了category
  • sales 被改成了int32
  • expenses 也被改成了int32

我们是怎么做的?

我们调用了 astype 方法,在括号内,我们提供了一个字典。

这个字典包含了几个形式为'column':'datatype' 的键/值对。

这就是真的......你只需要提供一个带有列名和新数据类型的字典。

关于Pandas替换的常见问题

现在我们已经看了一些例子,让我们看看关于replace() 技术的一些常见问题。

常见的问题。

问题1:我使用了astype,但是我的数据框架没有变化。 为什么?

如果你使用了astype方法,你可能会注意到,在你调用该方法后,你的原始数据框架仍然没有变化。

例如,在例子1中,我们使用了以下代码。

sales_data.astype({'sales':'int32'})

但是如果你在运行该代码后检查sales_data 的数据类型,你会发现sales 的数据类型没有变化。

这是因为当我们运行astype() 方法时,它会产生一个新的数据框,而让原来的数据框保持不变。

这就是大多数Pandas方法的工作方式。

默认情况下,该方法的输出被发送到控制台。 我们可以在控制台中看到输出,但是为了保存它,我们需要用一个名字来存储它。

例如,你可以像这样存储输出。

sales_data_updated = sales_data.astype({'sales':'int32'})

你可以把新的输出命名为你想要的任何东西。 你甚至可以用原来的名字命名sales_data

只是要小心。如果你把astype 的输出重新分配给原来的变量名,它将覆盖你原来的数据集。 确保你在覆盖一个输入数据框之前检查你的代码,使其正常工作。

在下面的评论中留下你的其他问题

你对Pandas的astype方法还有其他问题吗?

还有什么是你需要知道而我在这里没有涉及的吗?

如果有,请在下面的评论区留下你的问题。

发现如何在Pandas中变得 "流畅 "起来

本教程向你展示了如何使用Pandas astype方法,但如果你想掌握Pandas的数据处理,还有很多东西需要学习。

因此,如果你想掌握Python中的数据处理,并成为Pandas的 "流利 "使用者,那么你应该加入我们的课程,Pandas Mastery

Pandas Mastery是我们的在线课程,它将教你这些关键的数据处理工具,告诉你如何记住语法,并告诉你如何把它们放在一起。

你可以在这里了解更多。

**

了解更多关于Pandas Mastery的信息

**

.et_bloom .et_bloom_optin_7 .et_bloom_form_content { 背景色。#999999 !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_container .et_bloom_form_header { 背景色。#2a2b2d !important; } .et_bloom .et_bloom_optin_7 .carrot_edge .et_bloom_form_content:before { border-top-color:#2a2b2d !important; } .et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_right .et_bloom_form_content:before, .et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_left .et_bloom_form_content:before { border-top-color : transparent !important; border-left-color :#2a2b2d !important; } @media only screen and ( max-width: 767px ) {.et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_right .et_bloom_content:before { border-top-color:#2a2b2d !important; border-left-color: transparent !important; }.et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_left .et_bloom_form_content:after { border-bottom-color :#2a2b2d !important; border-left-color: transparent !important; }.et_bloom .et_bloom_optin_7 .et_bloom_form_content button { 背景色。#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_content .et_bloom_fields i { color:#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_content .et_bloom_custom_field_radio i: before { background:#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_content button { background-color:#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_container h2, .et_bloom .et_bloom_optin_7 .et_bloom_form_container h2 span, .et_bloom .et_bloom_optin_7 .et_bloom_form_container h2 strong { 字体-family:"Open Sans", Helvetica, Arial, Lucida, sans-serif; }.et_bloom .et_bloom_optin_7 .et_bloom_form_container p, .et_bloom .et_bloom_optin_7 .et_bloom_form_container p span, .et_bloom .et_bloom_optin_7 .et_bloom_form_container p strong, .et_bloom .et_bloom_optin_7 .et_bloom_form_container form input, .et_bloom .et_bloom_optin_7 .et_bloom_form_container form button span{字体:"Open Sans", Helvetica, Arial, Lucida, sans-serif; }

注册获取免费的数据科学教程

如果你想快速掌握数据科学,请注册我们的电子邮件列表。

当你注册时,你将会收到每周免费的关于如何在R和Python中进行数据科学的教程。

给我免费的教程!

检查您的电子邮件收件箱,确认您的订阅 ...