详细介绍在pandas中创建category类型数据的几种方法

在pandas中创建category类型数据的几种方法之详细攻略

T1、直接创建 category类型数据
可知,在category类型数据中,每一个元素的值要么是预设好的类型中的某一个,要么是空值(np.nan)。

T2、利用分箱机制(结合max、mean、min实现二分类)动态添加 category类型数据

输出结果
[NaN, 'medium', 'medium', 'fat']
Categories (2, object): ['medium', 'fat']
   name    ID  age  age02  ... weight    test01    test02  age02_mark
0   Bob     1  NaN     14  ...  140.5  1.000000  1.000000      Minors
1  LiSa     2   28     26  ...  120.8  2.123457  2.123457      Adults
2  Mary         38     24  ...  169.4  3.123457  3.123457      Adults
3  Alan  None           6  ...  155.6  4.123457  4.123457      Minors
 
[4 rows x 12 columns]

实习代码

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)

# T1、直接创建 category类型数据
weight_mark=pd.Categorical(['thin','medium','medium','fat'],categories=['medium','fat'])
print(weight_mark)

# T2、利用分箱机制(结合max、mean、min实现二分类)动态添加 category类型数据
col_age_des=pd.Series(data_frame['age02']).describe()
age_ranges=[col_age_des['min']-1,col_age_des['mean'],col_age_des['max']+1]
age_labels=['Minors','Adults']        # 高于平均值的为胖
data_frame['age02_mark']=pd.cut(data_frame['age02'],age_ranges,labels=age_labels)
print(data_frame)

到此这篇关于详细介绍在pandas中创建category类型数据的几种方法的文章就介绍到这了,更多相关pandas创建category内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python基础之教你怎么在M1系统上使用pandas

    一.问题 目前为止,M1系统上还不能使用pip3安装pandas库,无法使用pandas进行数据分析和处理.虽然网上也有专门适配M1的python环境,但实施起来也比较麻烦,不够纯粹. 那在M1上,如何使用pandas? 二.方案 docker新版本已经支持M1了,我们不妨尝试一下,是否可以用vscode+docker使用pandas. 1.安装M1版本的docker 访问https://docs.docker.com/docker-for-mac/install/,下载M1版本的docker.

  • pandas调整列的顺序以及添加列的实现

    在对excel的操作中,调整列的顺序以及添加一些列也是经常用到的,下面我们用pandas实现这一功能. 1.调整列的顺序 >>> df = pd.read_excel(r'D:/myExcel/1.xlsx') >>> df A B C D 0 bob 12 78 87 1 millor 15 92 21 >>> df.columns Index(['A', 'B', 'C', 'D'], dtype='object') # 这是最简单常用的一种方法,

  • python基于Pandas读写MySQL数据库

    要实现 pandas 对 mysql 的读写需要三个库 pandas sqlalchemy pymysql 可能有的同学会问,单独用 pymysql 或 sqlalchemy 来读写数据库不香么,为什么要同时用三个库?主要是使用场景不同,个人觉得就大数据处理而言,用 pandas 读写数据库更加便捷. 1.read_sql_query 读取 mysql read_sql_query 或 read_sql 方法传入参数均为 sql 语句,读取数据库后,返回内容是 dateframe 对象.普及一下

  • pandas 使用merge实现百倍加速的操作

    对于非连续数据集,数据可视化时候需要每七天一个采样点.要求是选择此前最新的数据作为当日的数据展示,譬如今天是2019-06-18,而数据集里只有2019-06-15,那就用2019-06-15的数据作为2019-06-18的数据去描点. 每七天一个采样点,会使得每天展示所选的数据都会有所不同.当时间往后推移一天,日期为2019-06-19,那么最新数据点从2019-06-19开始,第二个就是2019-06-12.这里就需要一个算法来快速的根据当前日期去选出(填充)一系列数据供数据可视化之用. 一

  • python中pandas.read_csv()函数的深入讲解

    这里将更新最新的最全面的read_csv()函数功能以及参数介绍,参考资料来源于官网. pandas库简介 官方网站里详细说明了pandas库的安装以及使用方法,在这里获取最新的pandas库信息,不过官网仅支持英文. pandas是一个Python包,并且它提供快速,灵活和富有表现力的数据结构.这样当我们处理"关系"或"标记"的数据(一维和二维数据结构)时既容易又直观. pandas是我们运用Python进行实际.真实数据分析的基础,同时它是建立在NumPy之上的

  • pandas读取excel时获取读取进度的实现

    写在前面 QQ群里偶然看到群友问这个问题, pandas读取大文件时怎么才能获取进度? 我第一反应是: 除非pandas的read_excel等函数提供了回调函数的接口, 否则应该没办法做到. 搜索了一下官方文档和网上的帖子, 果然是没有现成的方案, 只能自己动手. 准备工作 确定方案 一开始我就确认了实现方案, 那就是增加回调函数. 这里现学现卖科普一下什么是回调函数. 简单的说就是: 所使用的模块里面, 会调用一个你给定的外部方法/函数, 就是回调函数. 拿本次的尝试作为例子, 我会编写一个

  • python-pandas创建Series数据类型的操作

    1.什么是pandas 2.查看pandas版本信息 print(pd.__version__) 输出: 0.24.1 3.常见数据类型 常见的数据类型: - 一维: Series - 二维: DataFrame - 三维: Panel - - 四维: Panel4D - - N维: PanelND - 4.pandas创建Series数据类型对象 1). 通过列表创建Series对象 array = ["粉条", "粉丝", "粉带"] # 如

  • Python数据分析之pandas函数详解

    一.apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df = pd.DataFrame(np.random.randn(5,4) - 1) print(df) print(np.abs(df)) 运行结果: 0         1         2         3 0 -0.062413  0.844813 -1.853721 -1.980717 1 -0.539628 -1.975173 -0.856597 -2.612406

  • pandas 颠倒列顺序的两种解决方案

    在数据预处理过程中可能需要将列的顺序颠倒,有两种方法. import numpy as np import pandas as pd df = pd.DataFrame(np.array(range(20)).reshape(4,5)) print(df) 原始dataframe如下: 0 1 2 3 4 0 0 1 2 3 4 1 5 6 7 8 9 2 10 11 12 13 14 3 15 16 17 18 19 1. 方法一 手动设置列名列表,应用在dataframe中(适合列名比较少的

  • pandas中.loc和.iloc以及.at和.iat的区别说明

    显示索引和隐式索引 import pandas as pd df = pd.DataFrame({'姓名':['张三','李四','王五'],'成绩':[85,59,76]}) 传入冒号':',表示所有行或者列 显示索引:.loc,第一个参数为 index切片,第二个为 columns列名 df.loc[2] #index为2的记录,这里是王五的成绩. df.loc[:,'姓名'] #第一个参数为冒号,表示所有行,这里是筛选姓名这列记录. 隐式索引:.iloc(integer_location)

  • Python基础之pandas数据合并

    一.concat concat函数是在pandas底下的方法,可以将数据根据不同的轴作简单的融合 pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False) axis: 需要合并链接的轴,0是行,1是列join:连接的方式 inner,或者outer 二.相同字段的表首尾相接 #现将表构成l

  • pandas快速处理Excel,替换Nan,转字典的操作

    pandas读取Excel import pandas as pd # 参数1:文件路径,参数2:sheet名 pf = pd.read_excel(path, sheet_name='sheet1') 删除指定列 # 通过列名删除指定列 pf.drop(['序号', '替代', '签名'], axis=1, inplace=True) 替换列名 # 旧列名 新列名对照 columns_map = { '列名1': 'newname_1', '列名2': 'newname_2', '列名3':

  • 解决使用pandas聚类时的小坑

    问题背景: 之前运行测试好好的程序,忽然出现了报错,还是merge时候的类型错误,这个bug有点蹊跷. 问题分析: 代码:进行聚类之后计算平均值与方差 tmp_df = df[['object1', 'float']].groupby(['object1']).head(20).groupby(['object1'])['float'].agg(['mean', 'sum']).reset_index() 这个输出的就是原本的数据类型:一个object,一个float64 tmp_df = ht

  • 浅谈Pandas dataframe数据处理方法的速度比较

    数据修改主要以增删改差为主,这里比较几种写法在数据处理时间上的巨大差别. 数据量大概是500万行级别的数据,文件大小为100M. 1.iloc iloc是一种速度极其慢的写法.这里我们对每个csv文件中的每一行循环再用iloc处理,示例代码如下: for index in range(len(df)): df.iloc['attr'][index] = xxx 使用这种方法对五百万行的数据进行处理大概需要5个小时,实在是很慢. 2.at at相比于iloc有了很大的性能提升,也是for循环处理,

随机推荐