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

数据处理 专栏收录该内容
3 篇文章 0 订阅

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

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

举例数据

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

data数据输出

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

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

输出结果:
理想的输出
但从上面这个例子来看,astype()函数还是不错的,但是下面的例子就有点差强人意了。

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

输出结果:
报错图片

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

输出结果:
报错图片

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

输出结果:
错误示例
乍一看,结果看起来不错,但仔细观察后,会发现一个大问题。那就是所有的值都被替换为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)

输出结果:

可以看到,非数值被替换成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']])


完成数据列的替换:

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

在这里插入图片描述

  • 7
    点赞
  • 0
    评论
  • 37
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页

打赏作者

w_shuo

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值