当前位置: 首页 > news >正文

pandas(11 分类数据和数据可视化)

前面内容:pandas(10 日期和Timedelta) 

目录

一、Python Pandas 分类数据

1.1 pd.Categorical()

1.2 describe()

1.3 获取类别的属性

1.4 分类操作

1.5 分类数据的比较

二、Python Pandas 数据可视化 

2.1 基础绘图:plot

2.2 条形图

2.3 直方图

2.4 箱线图

2.5 面积图

2.6 散点图

2.7 饼图 


一、Python Pandas 分类数据

在 pandas 中,分类数据(Categorical data) 是一种特殊的数据类型,它通过将数据分为不同的类别来有效地减少内存使用并提高性能。它在处理具有有限数量的可能值(如性别、状态、等级等)的列时非常有用。

对象创建

分类对象可以通过多种方式创建。以下是不同的方式描述:

分类

在Pandas对象创建时,将dtype指定为”category”。

 例1: 

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print(s)

运行结果: 

传递给系列对象的元素数量是四个,但类别只有三个。观察输出的类别。 

创建分类数据

你可以使用 pandas.CategoricalSeries.astype('category') 方法将数据转换为分类类型。

1.1 pd.Categorical()

pd.Categorical() pandas 库中的一个功能强大的函数,用于将数据转换为分类类型。 

pd.Categorical()语法

pd.Categorical(values, categories=None, ordered=False, dtype=None)

参数:

  • values: 要转换为分类类型的数据,可以是列表、numpy 数组或者 pandas Series。
  • categories: 一个列表,指定分类的取值。如果没有提供,pandas 会自动推断这些类别。
  • ordered: 布尔值(默认为 False)。如果设置为 True,表示类别之间有顺序(可以进行大于、小于等比较操作)。
  • dtype: 可选的,指定分类的类型,例如 category

例1.2:pd.Categorical() 

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

运行结果: 

例1.2 : 

import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print(cat)

运行结果:

例1.3: ordered = True

import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print(cat)

运行结果:

1.2 describe()

在分类数据上使用 .describe() 命令,我们得到与 Series 或 DataFrame 类型的字符串相似的输出。

例1.4: df.describe()

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print(df.describe())
print('-'*50)
print(df["cat"].describe())

运行结果: 

1.3 获取类别的属性

obj.cat.categories 命令用于获取对象的 类别 。

例1.5:返回分类数据的类别列表 

import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print(s.categories)

运行结果:

例1.6: 否有顺序

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print(cat.ordered)

运行结果:

1.4 分类操作

通过为 series.cat.categories 属性赋新值来重命名分类。

例1.7: 重命名分类

import pandas as pd

# 创建一个包含分类数据的 Series
s = pd.Series(["a", "b", "c", "a"], dtype="category")

# 获取当前类别,并修改它
new_categories = ["Group %s" % g for g in s.cat.categories]

# 使用新的类别创建一个新的 Categorical 类型
s = pd.Series(s.cat.codes, dtype=pd.CategoricalDtype(categories=new_categories, ordered=False))

# 打印更新后的类别
print(s.cat.categories)

运行结果:

例1.8:添加新类别 

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print(s.cat.categories)

运行结果:

例1.9 :移除分类

使用 Categorical.remove_categories() 方法,可以移除不需要的分类。

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print(s)
print('-'*50)
print(s.cat.remove_categories("a"))

运行结果: 

1.5 分类数据的比较

pandas 中,分类数据(Categorical 类型)支持比较操作,特别是当你使用有序类别(ordered=True)时,能够进行基于顺序的比较,例如 <>== 等。分类数据通常用于具有有限、固定类别的数据,并且在处理时可以提高性能,特别是当类别数据具有某种顺序时。

分类数据比较的基本操作

  1. 无序类别比较(ordered=False: 如果分类数据是无序的,不能进行大小比较,但可以检查是否相等。

  2. 有序类别比较(ordered=True: 如果分类数据是有序的(即 ordered=True),则可以执行基于顺序的比较。

例1.10: 

import pandas as pd

# 创建 Categorical 类型的 dtype,并指定类别和顺序
cat_dtype = pd.CategoricalDtype(categories=[1, 2, 3], ordered=True)

# 创建第一个 Series
cat = pd.Series([1, 2, 3]).astype(cat_dtype)

# 创建第二个 Series
cat1 = pd.Series([2, 2, 2]).astype(cat_dtype)

# 进行比较
print(cat > cat1)

运行结果: 

二、Python Pandas 数据可视化 

2.1 基础绘图:plot

这个功能在Series和DataFrame上只是一个对matplotlib库plot()方法的简单封装。

例1: 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
   periods=10), columns=list('ABCD'))

df.plot()

运行结果:

2.2 条形图

例2:条形图(.bar) 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.bar()

运行结果: 

例3:可堆叠 (stacked=True)

df.plot.bar(stacked=True)

运行结果: 

例4:横向(barh) 

df.plot.barh(stacked=True)

运行结果:

2.3 直方图

可以使用 plot.hist() 方法绘制直方图。我们可以指定条柱的数量。

例5: 直方图(hist )

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.plot.hist(bins=20)

运行结果: 

 

要为每列绘制不同的直方图,请使用以下代码−

例6:(.diff.hist) 

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.diff().hist(bins=20)

运行结果: 

2.4 箱线图

可调用 Series.box.plot() 和 DataFrame.box.plot() ,或 DataFrame.boxplot() 来可视化每列数值的分布。

例7: 箱线图(box)

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()

运行结果:

2.5 面积图

可以使用 Series.plot.area() 或 DataFrame.plot.area() 方法创建面积图。

例8:面积图(area) 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

运行结果:

2.6 散点图

可以使用 DataFrame.plot.scatter() 方法来创建散点图。

例9:散点图(scatter) 

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

运行结果:

2.7 饼图 

例10:饼图(pie)

import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)

subplots=True 参数用于在绘制多个图形时将每一列或每一行的图形绘制到不同的子图(subplot)中。这样可以帮助你在同一画布上并排展示多个图形。

此外,饼图必须 subplots=True

运行结果: 

 

相关文章:

  • 腿足机器人之八- 腿足机器人动力学
  • linux--关于linux文件IO(2) open、read、lseek、stat
  • matlab功率谱反演法
  • B. Longest Divisors Interval
  • Linux 基于共享内存的循环队列实现
  • 深度学习02 神经网络实现手写数字案例
  • 成熟开发者需具备的能力
  • GDB 调试入门教程
  • Python中数学问题1--lcm、gcd
  • SpringBoot整合easy-es
  • AIP-145 范围
  • el与data的2种写法
  • 图像生成GAN和风格迁移
  • React Hooks 的两个坑点
  • React.memo 使用详解与最佳实践
  • Java中对象序列化机制的优化研究
  • C++ std::atomic可以使用复杂类型(类和结构体)吗
  • 【C++】vector的使用练习 + 模拟实现
  • pnpm和npm安装TailwindCss
  • 【C++】34.智能指针(1)
  • 秦洪看盘|风格有所转变,热钱回流高弹性品种
  • 中拉互联网发展与合作论坛在西安开幕
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • 著名植物学家、园艺学家,国际植物园协会原主席贺善安逝世
  • 王征、解宁元、牛恺任西安市副市长
  • 袁思达已任中国科学院办公厅主任