知识点
在pandas中,如果某个字段下,数据类型不一致导致整个字段类型不相同,可以进行字段类型转换!,在pandas中,进行数据类型转换非常简单,只需要使用astype函数即可!
1、category类型与object类型
object类型(python中) category类型(pandas中特有)
简介
python是面向对象的语言。在python里面,一切皆为对象。
在python中,
object类型,一般表示文本类型数据。
有些难以被自动判别的数据类型,或者由不止一种数据类型组成;由于Python一切皆对象,因此都会被处理为最宽泛的"对象"也就是object类型数据。
其实,在数据分析中,有时候会遇到某个字段的数据类型与初始设置的不相符,此时,就要去分析是否是数据不规整造成的。
category是 pandas 的一种数据类型,对应着被统计的变量。它实际上是动态枚举的一种形式。如果某个字段的内容中,其可能值的范围是固定且有限的,则category类型数据最为适用;
category是由固定的且有限数量的变量组成的。比如:性别、血型、等级等;
category类型数据的每一个元素的值,要么是预设好的类型中的某一个,要么是空值(np.nan);
在比较大的数据集中,可以通过使用category类型数据来加快速度!
属性 具有object类型数据的基本属性。
.describe()
.cat.categories
.cat.rename_categories
.value_counts()
.str 属性
pd.concat
union_categoricals
内存使用量
转换 df["col"].astype(‘category‘)
输出结果
实现代码
import pandas as pd
import numpy as np
contents={"name": ['Bob', 'LiSa', 'Mary', 'Alan'],
"ID": [1, 2, ' ', None], # 输出 NaN
"age": [np.nan, 28, 38 , '' ], # 输出
"age02": [14, 26, 24 , 6],
"born": [pd.NaT, pd.Timestamp("1990-01-01"), pd.Timestamp("1980-01-01"), ''], # 输出 NaT
"sex": ['男', '女', '女', None,], # 输出 None
"hobbey":['打篮球', '打羽毛球', '打乒乓球', '',], # 输出
"money":[200.0, 240.0, 290.0, 300.0], # 输出
"weight":[140.5, 120.8, 169.4, 155.6], # 输出
"test01":[1, 2.123456789, 3.123456781011126, 4.123456789109999], # 输出
"test02":[1, 2.123456789, 3.123456781011126, 4.123456789109999], # 输出
}
data_frame = pd.DataFrame(contents)
print('Init-------------------------------')
print(data_frame.dtypes)
print(data_frame)
# 将dataframe格式中的数据类型转为object数据类型
data_frame['test02'] = data_frame['test02'].astype('object') # 关键字bool,'object'、'category'、str
data_frame['test02'] = data_frame['test02'].apply(str)
data_frame.to_excel("data_demo.xls")
print('after astype-------------------------------')
print(data_frame.dtypes)
print(data_frame)
data_frame_temp=data_frame.copy()
# ML之FE:将dataframe中的数据类型进行标准化
print('after Categorical-------------------------------')
data_frame=cols2DfCatAndNum(data_frame)
print(data_frame.dtypes)