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
'''