Pandas 学习笔记
Pandas 的基本概念就是 DataFrame,所有属性和操作都是围绕它而来。
<!--more-->
Padans 中的每一列叫做 Series,每一个 Series 中的数据类型要保持一致,但是 DataFrame 中的 Series 的类型可以不一样。
一般 Python 三剑客的导入的方法如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
创建 Series 和索引
序列 = 数据 + 索引 + 序列名 + 数据类型
>>> s_age = pd.Series(data=[1, 2, 3, 4], index=["a", "b", "c", "d"], name="mySeries", dtype=np.int32)
>>> s_age
a 1
b 2
c 3
d 4
Name: mySeries, dtype: int32
>>> s_age.reindex(['a','b','e']) # 重排
a 1.0
b 2.0
e NaN
Name: mySeries, dtype: float64
>>> s_age[0]
1
>>> s_age[1:2]
b 2
Name: mySeries, dtype: int32
>>> s_age[1:2]=22
>>> s_age
a 1
b 22
c 3
d 4
Name: mySeries, dtype: int32
>>> s_age["a"]
1
创建 DataFrame
用 Series 创建
>>> s1 = pd.Series(data=["M", "F", "M", "F"], index=["a", "b", "c", "d"], name="sex")
>>> s2 = pd.Series(data=[21, 22, 23, 24], index=["a", "b", "c", "d"], name="age")
>>> df = pd.DataFrame({'sex': s1.astype("category"), 'age': s2})
>>> df
age sex
a 21 M
b 22 F
c 23 M
d 24 F
从文件中读取
包括但不限于 csv,数据库。
iris=pd.read_csv('https://raw.github.com/pydata/pandas/master/pandas/tests/data/iris.csv', sep=',')
查看属性
>>> df.index # 行名
Index(['a', 'b', 'c', 'd'], dtype='object')
>>> df.columns # 列名
Index(['age', 'sex'], dtype='object')
>>> df.dtypes # 列属性,也就是 Series 类型
age int64
sex category
dtype: object
head 和 tail 就和 Linux 下面的 haed 和 tail 命令类似。
>>> df.head()
age sex
a 21 M
b 22 F
c 23 M
d 24 F
>>> df.tail()
age sex
a 21 M
b 22 F
c 23 M
d 24 F
>>> df.describe()
age
count 4.000000
mean 22.500000
std 1.290994
min 21.000000
25% 21.750000
50% 22.500000
75% 23.250000
max 24.000000
聚合
就和 sql 中的 groupby 类似。
>>> df.groupby([df["sex"]]).agg({"age": ["sum", "mean"]})
age
sum mean
sex
F 46 23
M 44 22
排序
可以指定排序的依据,是否倒序等等。
>>> df.sort_index(ascending=False)
age sex
d 24 F
c 23 M
b 22 F
a 21 M
>>> df.sort_values(by="age", ascending=False)
age sex
d 24 F
c 23 M
b 22 F
a 21 M
透视
>>> df
age sex sorce
a 21 M 11
b 22 F 12
c 23 M 13
d 24 F 14
>>> df.pivot_table(index=['age'], columns=['sex'], values=['sorce'], aggfunc=[len, np.mean,np.sum],margins=True, fill_value=0)
len mean sum
sorce sorce sorce
sex F M All F M All F M All
age
21 0 1 1 0 11 11 0 11 11
22 1 0 1 12 0 12 12 0 12
23 0 1 1 0 13 13 0 13 13
24 1 0 1 14 0 14 14 0 14
All 2 2 4 13 12 12 26 24 50
索引
也就是定位元素。
>>> df[1:3] # 切片
age sex sorce
b 22 F 12
c 23 M 13
>>> df[df.sorce>12] # bool 索引
age sex sorce
c 23 M 13
d 24 F 14
>>> df.query('sorce>12') # sql 索引
age sex sorce
c 23 M 13
d 24 F 14
>>> df = pd.DataFrame(np.arange(10).reshape(-1, 2), columns=['A', 'B'])
>>> df.where(df.A>2, 10) # 不满足条件的填充
A B
0 10 10
1 10 10
2 4 5
3 6 7
4 8 9
>>> df
A B
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
>>> df.A # 选择列
a 0
b 2
c 4
d 6
e 8
Name: A, dtype: int64
>>> df[['A', 'B']] # 选择多列
A B
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
>>> df.loc[['a','b'], ['A','B']] # 选择行与列
A B
a 0 1
b 2 3
>>> df.iloc[1:3, 0:2] # 根据行列下标来选择
A B
b 2 3
c 4 5
合并数据
# axis 设置纬度,join 指定合并方式,参考 sql 的连接
pd.concat([df1,df2],axis=0,join='outer')
# merge 就和 sql 的 join 类似
pd.merge(df1,df2,on=['age'],how='left')
更多参数和直观的体现可以参考 Merge, join, and concatenate。
采样
df1.sample(n=100, weights='age',axis=0, replace=True)
sklearn 也有对 DataFrame 进行 shuffle 的函数。
欧阳松的博客
欧阳松 (@ouyangsong) 的博客,关于算法,编程语言以及黑客精神的笔记,记录了程序员的修炼之道。
14 声望
1 粉丝
推荐阅读
Python数据分析库介绍及引入惯例
Python有一个叫做全局解释器锁(Global Interpreter Lock,GIL)的组件,这是一种防止解释器同时执行多条Python字节码指令的机制。这并不是说Python不能执行真正的多线程并行代码。例如,Python的C插件使用原生的...
YOLO阅读 930
Pandas 2.0正式版发布: Pandas 1.5,Polars,Pandas 2.0 速度对比测试
Pandas 2.0正式版在4月3日已经发布了,以后我们pip install默认安装的就是2.0版了,Polars 是最近比较火的一个DataFrame 库,最近在kaggle上经常使用,所以这里我们将对比下 Pandas 1.5,Polars,Pandas 2.0 。看...
deephub阅读 557
Pandas 2.0 vs Polars:速度的全面对比
前几天的文章,我们已经简单的介绍过Pandas 和Polars的速度对比。刚刚发布的Pandas 2.0速度得到了显著的提升。但是本次测试发现NumPy数组上的一些基本操作仍然更快。并且Polars 0.17.0,也在上周发布,并且也提到...
deephub阅读 433
Pandas 2.0 简单介绍和速度评测
Pandas是机器学习中最常用的一个库了,我们基本上每天都会使用它。而pandas使用了一个“NumPy”作为后端,这个我们也都是知道的,但是最近 Pandas 2.0 的RC版已经最近发布了。这个版本主要包括bug修复、性能改进和...
deephub阅读 432
现在支持对maxcompute的odpssql节点执行结果进行检查吗,比如检查select 得到的数
具体的实现方式为,我们可以将odpssql节点执行结果导出到本地设备中的.csv或.xlsx文件中,然后使用Python的pandas库读取这些文件,在读取的过程中进行数据的校验,包括数据类型、数值范围、空值等等。如果数据不...
阿里云开发者阅读 395
时间序列特征提取的Python和Pandas代码示例
时间序列分析是理解和预测各个行业(如金融、经济、医疗保健等)趋势的强大工具。特征提取是这一过程中的关键步骤,它涉及将原始数据转换为有意义的特征,可用于训练模型进行预测和分析。在本文中,我们将探索使用P...
deephub阅读 387
从Pandas快速切换到Polars :数据的ETL和查询
我们以前的两篇文章来测试Pandas 1.5.3、polar和Pandas 2.0.0之间的性能了,Polars 正好可以解决大数据量是处理的问题,所以本文将介绍如何将日常的数据ETL和查询过滤的Pandas转换成polars。
deephub阅读 306
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。