学科分类
目录
数据分析

更改数据类型

在处理数据时,可能会遇到数据类型不一致的问题。例如,通过爬虫采集到的数据都是整型的数据,在使用数据时希望保留两位小数点,这时就需要将数据的类型转换成浮点型。针对这种问题,既可以在创建Pandas对象时明确指定数据的类型,也可以使用astype()方法和to_numberic()函数进行转换。接下来,分别为大家来一一介绍,具体内容如下。

1. 明确指定数据的类型

创建Pandas数据对象时,如果没有明确地指出数据的类型,则可以根据传入的数据推断出来,并且通过dtypes属性进行查看。例如,创建一个Series对象,并查看其数据的类型,具体代码如下。

In [19]: import pandas as pd
         df = pd.DataFrame({'A':['5', '6', '7'], 'B':['3', '2', '1']})
         df.dtypes # 查看数据的类型
Out[19]:
A   object
B   object
dtype: object

除此之外,还可以在创建Pandas对象时明确地指定数据的类型,即在使用构造方法创建对象时,使用dtype参数指定数据的类型,示例代码如下:

In [20]: import pandas as pd
         # 创建DataFrame对象,数据的类型为int
         df = pd.DataFrame({'A': ['5', '6', '7'], 'B': ['3', '2', '1']},dtype='int')
         df.dtypes

Out[20]:
A  int32
B  int32
dtype: object

2. 通过astype()方法强制转换数据的类型

通过astype()方法可以强制转换数据的类型,其语法格式如下:

astype(dtype,copy = True,errors ='raise',** kwargs )

上述方法中部分参数表示的含义如下:

(1) dtype:表示数据的类型。

(2) copy:是否建立副本,默认为True。

(3) errors:错误采取的处理方式,可以取值为raise或ignore。其中,raise表示允许引发异常,ignore表示抑制异常,默认为raise。

接下来,通过一个示例来演示如何通过astype()方法来强转数据的类型。

首先,创建一个DataFrame对象,并且使用dtypes属性查看数据的类型,具体代码如下。

In [21]: import pandas as pd
         df = pd.DataFrame({'A': ['1', '1.2', '4.2'],
                            'B': ['-9', '70', '88'],
                            'C': ['x', '5.0', '0']})
        df.dtypes

Out[21]:
​     A  object
​     B  object
​     C  object
​     dtype: object

从输出结果看出,所有数据的类型均为object。

然后,将B列数据的类型转换为int类型,实现对指定列的数据进行类型转换,示例代码如下:

In [22]: df['B'].astype(dtype='int') # 强制转换为int类型
Out[22]:
0  -9
1  70
2  88
Name:B, dtype:int32

需要注意的是,这里并没有将所有列进行类型转换,主要是因为C列中有字符,无法将其转换为int类型,若强制转换会出现ValueError异常。

3. 通过to_numeric()函数转换数据类型

astype()方法虽然可以转换数据的类型,但是它存在着一些局限性,只要待转换的数据中存在非数字以外的字符,在使用astype()方法进行类型转换时就会出现错误,而to_numeric()函数的出现正好解决了这个问题。

to_numeric()函数可以将传入的参数转换为数值类型,其语法格式如下:

pandas.to_numeric(arg, errors='raise', downcast=None)

上述函数中常用参数表示的含义如下:

(1) arg:表示要转换的数据,可以是list、tuple、Series。

(2) errors:错误采取的处理方式。

为了更好地理解,接下来,通过一个示例来演示如何将只包含数字的字符串转换为int类型,具体代码如下。

In [23]: import pandas as pd
         ser_obj = pd.Series(['1', '1.2', '4.2'])
         ser_obj
Out[23]:
0   1
1  1.2
2  4.2
dtype: object
In [24]: # 转换object类型为float类型
pd.to_numeric(ser_obj, errors='raise')
Out[24]: 
0  1.0
1  1.2
2  4.2
dtype: float64

注意:

to_numeric()函数是不能直接操作DataFrame对象的。

点击此处
隐藏目录