pandas—数据类型转换

1 数据类型

#使用seaborn中的tip数据集
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
#查看数据集中每列的数据类型,其中:category数据类型表示分类变量
print(tips.dtypes)
print(tips)

'''
total_bill     float64
tip            float64
sex           category
smoker        category
day           category
time          category
size             int64
dtype: object
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
..          ...   ...     ...    ...   ...     ...   ...
'''

2 类型转换

2.1 转换为字符串对象 .astype(str)

python内置str、float、int、complex、bool几种数据类型。astype方法是通用函数。

#tips多出一列,并改为object类型
tips['sex_str'] = tips['sex'].astype(str)
print(tips.dtypes)
print(tips.tail())

#在原基础上不增新列,将total_bill改为object类型
tips['total_bill'] = tips['total_bill'].astype((str))
print(tips.dtypes)
'''
sex_str         object

     total_bill   tip     sex smoker   day    time  size sex_str
239       29.03  5.92    Male     No   Sat  Dinner     3    Male
'''

2.2 转化为数值类型 

to_numeric 擅长处理非数值类型数据,有些数值列包含一些NAN值(missing或null)会使得整列变成字符串对象

#先取子集,加入一些空值,查看类型
tips_son = tips.head(10)
tips_son.loc[[1,3,5,7],'tip'] = 'missing'
print(tips_son)
print(tips_son.dtypes)   #发现带有空值的int类型会变为字符串对象类型

'''
   total_bill      tip     sex smoker  day    time  size
0       16.99     1.01  Female     No  Sun  Dinner     2
1       10.34  missing    Male     No  Sun  Dinner     3
2       21.01      3.5    Male     No  Sun  Dinner     3
3       23.68  missing    Male     No  Sun  Dinner     2

tip             object
'''

astype 无法将带有缺失值的列的object转化为float类型

to_numeric函数直接转换 也会出错

to_numeric函数的errors参数有几个取值:

        raise:是errors参数的默认值,即直接使用会引发错误

        coerce:遇到无法转换的数值,会返回NaN  (有用)

        ignore:会放弃转换,直接返回整列(什么都不做)

#ignore 无任何变化
tips_son['tip'] = pd.to_numeric(tips_son['tip'], errors='ignore')
print(tips_son.dtypes)
'''
1       10.34  missing    Male     No  Sun  Dinner     3
tip             object
'''
#确定某列是数值类型,但不知道为什么包含非数值型,coerce是有用的
tips_son['tip'] = pd.to_numeric(tips_son['tip'], errors='coerce')
print(tips_son)
print(tips_son.dtypes)
'''
1       10.34   NaN    Male     No  Sun  Dinner     3
tip            float64
'''

to_numeric 另一个 downcast 参数 (向下转型)

downcast参数 默认为None,其他可以取值为 integer、signed、unsigned、float

向下转型:把数据类型更改为最小的数值类型,例:将float64转为float32 占用内存变小

tips_son['tip'] = pd.to_numeric(tips_son['tip'], errors='coerce',downcast='float')
print(tips_son.dtypes)

'''
tip            float32
'''

3 分类数据

Pandas中 category dtype,用于对分类值进行编码

分类数据优点:
      1 存储数据节约内存,提高速度,尤其数据集中包含许多重复的字符串值时
      2 当一列值存在一定的顺序,应转换成分类数据。
      3 有些Python库可以处理分类数据(比如拟合统计模型)。

3.1 转换为category类型

#astype方法 先将sex列转换为字符串对象
tips['sex'] = tips['sex'].astype('str')
print(tips.info())

#再将sex列数据类型转换会catefory
tips['sex'] = tips['sex'].astype('category')
print(tips.info())

'''
 2   sex         244 non-null    object  
-------------------
 2   sex         244 non-null    category
'''

3.2 操作分类数据

可以在分类上执行以下操作:

#例 类别
a = tips['sex'].cat.categories
print(a)
#类别是否有序
b = tips['sex'].cat.ordered
print(b)

'''
Index(['Male', 'Female'], dtype='object')
False
'''
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值