数据处理之Pandas中数据类型转换

Pandas中进行数据类型转换有二种基本方法:

  • 使用astype()函数进行强制类型转换
  • 使用Pandas提供的函数如to_numeric()、to_datetime()

举例数据

import numpy as np
import pandas as pd
 
data = pd.read_csv('data.csv', encoding='gbk') #因为数据中含有中文数据
data

数据处理之Pandas中数据类型转换_第1张图片

1.使用astype()函数进行强制类型转换

data['客户编号'].astype('object')
data['客户编号'] = data['客户编号'].astype('object')

输出结果:
数据处理之Pandas中数据类型转换_第2张图片
但从上面这个例子来看,astype()函数还是不错的,但是下面的例子就有点差强人意了。

data['2017'].astype('float')

输出结果:
数据处理之Pandas中数据类型转换_第3张图片

data['所属组'].astype('int')

输出结果:
数据处理之Pandas中数据类型转换_第4张图片

data['状态'].astype('bool')

输出结果:
数据处理之Pandas中数据类型转换_第5张图片
乍一看,结果看起来不错,但仔细观察后,会发现一个大问题。那就是所有的值都被替换为True了,但是该列中包含好几个N标志,所以astype()函数在该列也是失效的。

总结一下astype()函数有效的情形:

  1. 数据列中的每一个单位都能简单的解释为数字(2, 2.12等)
  2. 数据列中的每一个单位都是数值类型且向字符串object类型转换

2.利用Pandas的一些辅助函数进行类型转换

Pandas的astype()函数和复杂的自定函数之间有一个中间段,那就是Pandas的一些辅助函数。这些辅助函数对于某些特定数据类型的转换非常有用(如to_numeric()、to_datetime())。所属组数据列中包含一个非数值,用astype()转换出现了错误,然而用to_numeric()函数处理就好很多。

pd.to_numeric(data['所属组'], errors='coerce').fillna(0)

输出结果:
数据处理之Pandas中数据类型转换_第6张图片
可以看到,非数值被替换成0.0了。
参数解释:

(
	arg    :(标量,列表,元组,一维数组或系列)	要转换的参数。
	errors :{‘ignore’,raise,coerce}, 默认为“raise”
		如果为“ raise”,则无效的解析将引发异常。
		如果为“coerce”,则将无效解析设置为NaN。
		如果为“ ignore”,则无效的解析将返回输入。
	downcast {'integer''signed''unsigned''float'},默认值 None,如果不是None;
	并且数据已成功转换为数字dtype(或者数据是从数字开始的),则根据以下规则将结果数据转换为可能的最小数字dtype:
		'integer''signed':最小的有符号int dtype(最小值:np.int8)
		'unsigned'         :最小的无符号int dtype(最小值:np.uint8)
		'float'            :最小的float dtype(最小值:np.float32)

Pandas中的to_datetime()函数可以把单独的year、month、day三列合并成一个单独的时间戳。

pd.to_datetime(data[['day', 'month', 'year']])

数据处理之Pandas中数据类型转换_第7张图片
完成数据列的替换:

data['new_date'] = pd.to_datetime(data[['day', 'month', 'year']]) #新产生的一列数据
data['所属组'] = pd.to_numeric(data['所属组'], errors='coerce').fillna(0)

数据处理之Pandas中数据类型转换_第8张图片

你可能感兴趣的:(数据处理,数据挖掘)