目录
一、Series和DataFrame
Pandas特别适合处理表格数据,如SQL表格、EXCEL表格。有序或无序的时间序列。具有行和列标签的任意矩阵数据。
打开Jupyter Notebook,导入numpy和pandas开始我们的教程:
import numpy as np
import pandas as pd
1. pandas.Series
Series是带有索引的一维ndarray数组。索引值可不唯一,但必须是可哈希的。
pd.Series([1, 3, 5, np.nan, 6, 8])
输出:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
我们可以看到默认索引值为0、1、2、3、4、5这样的数字。添加index
属性,指定其为'c','a','i','yong','j','i'。
pd.Series([1, 3, 5, np.nan, 6, 8], index=['c','a','i','yong','j','i'])
输出如下,我们可以看到index是可重复的。
c 1.0
a 3.0
i 5.0
yong NaN
j 6.0
i 8.0
dtype: float64
2. pandas.DataFrame
DataFrame是带有行和列的表格结构。可以理解为多个Series对象的字典结构。
pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index=['i','ii','iii'], columns=['A', 'B', 'C'])
输出表格如下,其中index
对应它的行,columns
对应它的列。
A | B | C | |
---|---|---|---|
i | 1 | 2 | 3 |
ii | 4 | 5 | 6 |
iii | 7 | 8 | 9 |
二、Pandas常见用法
1. 访问数据
准备数据,随机生成6行4列的二维数组,行标签为从20210101到20210106的日期,列标签为A、B、C、D。
import numpy as np
import pandas as pd
np.random.seed(20201212)
df = pd.DataFrame(np.random.randn(6, 4), index=pd.date_range('20210101', periods=6), columns=list('ABCD'))
df
记住np.random.randn(6,4)的用法。pd.date_range("开始时间",periods= 数量),columns = list(列字符串组合起来)
展示表格如下:
A | B | C | D | |
---|---|---|---|---|
2021-01-01 | 0.270961 | -0.405463 | 0.348373 | 0.828572 |
2021-01-02 | 0.696541 | 0.136352 | -1.64592 | -0.69841 |
2021-01-03 | 0.325415 | -0.602236 | -0.134508 | 1.28121 |
2021-01-04 | -0.33032 | -1.40384 | -0.93809 | 1.48804 |
2021-01-05 | 0.348708 | 1.27175 | 0.626011 | -0.253845 |
2021-01-06 | -0.816064 | 1.30197 | 0.656281 | -1.2718 |
1.1 head()和tail()
查看表格前几行:使用head()
df.head(2)
展示表格如下:
A | B | C | D | |
---|---|---|---|---|
2021-01-01 | 0.270961 | -0.405463 | 0.348373 | 0.828572 |
2021-01-02 | 0.696541 | 0.136352 | -1.64592 | -0.69841 |
查看表格后几行:使用tail()
df.tail(3)
展示表格如下:
A | B | C | D | |
---|---|---|---|---|
2021-01-04 | -0.33032 | -1.40384 | -0.93809 | 1.48804 |
2021-01-05 | 0.348708 | 1.27175 | 0.626011 | -0.253845 |
2021-01-06 | -0.816064 | 1.30197 | 0.656281 | -1.2718 |
1.2 describe()
describe
方法用于生成DataFrame的描述统计信息。可以很方便的查看数据集的分布情况
。注意,这里的统计分布不包含NaN
值。
df.describe()
展示如下:
A | B | C | D | |
---|---|---|---|---|
count | 6 | 6 | 6 | 6 |
mean | 0.0825402 | 0.0497552 | -0.181309 | 0.22896 |
std | 0.551412 | 1.07834 | 0.933155 | 1.13114 |
min | -0.816064 | -1.40384 | -1.64592 | -1.2718 |
25% | -0.18 | -0.553043 | -0.737194 | -0.587269 |
50% | 0.298188 | -0.134555 | 0.106933 | 0.287363 |
75% | 0.342885 | 0.987901 | 0.556601 | 1.16805 |
max | 0.696541 | 1.30197 | 0.656281 | 1.48804 |
我们首先回顾一下我们掌握的数学公式。
平均数(mean):
方差(variance):
标准差(std):
我们解释一下pandas的describe统计信息各属性的意义。我们仅以 A
列为例。
-
count
表示计数。A列有6个数据不为空。 -
mean
表示平均值。A列所有不为空的数据平均值为0.0825402。 -
std
表示标准差。A列的标准差为0.551412。 -
min
表示最小值。A列最小值为-0.816064。即,0%的数据比-0.816064小。 -
25%
表示四分之一分位数。A列的四分之一分位数为-0.18。即,25%的数据比-0.18小。 -
50%
表示二分之一分位数。A列的四分之一分位数为0.298188。即,50%的数据比0.298188小。 -
75%
表示四分之三分位数。A列的四分之三分位数为0.342885。即,75%的数据比0.342885小。 -
max
表示最大值。A列的最大值为0.696541。即,100%的数据比0.696541小。
1.3 T
T
一般表示Transpose
的缩写,即转置。行列转换。
df.T
展示表格如下:
2021-01-01 | 2021-01-02 | 2021-01-03 | 2021-01-04 | 2021-01-05 | 2021-01-06 | |
---|---|---|---|---|---|---|
A | 0.270961 | 0.696541 | 0.325415 | -0.33032 | 0.348708 | -0.816064 |
B | -0.405463 | 0.136352 | -0.602236 | -1.40384 | 1.27175 | 1.30197 |
C | 0.348373 | -1.64592 | -0.134508 | -0.93809 | 0.626011 | 0.656281 |
D | 0.828572 | -0.69841 | 1.28121 | 1.48804 | -0.253845 | -1.2718 |
1.4 sort_values()
指定某一列进行排序,如下代码根据C
列进行正序排序。其他列随着移动
df.sort_values(by='C')
展示表格如下:
A | B | C | D | |
---|---|---|---|---|
2021-01-02 | 0.696541 | 0.136352 | -1.64592 | -0.69841 |
2021-01-04 | -0.33032 | -1.40384 | -0.93809 | 1.48804 |
2021-01-03 | 0.325415 | -0.602236 | -0.134508 | 1.28121 |
2021-01-01 | 0.270961 | -0.405463 | 0.348373 | 0.828572 |
2021-01-05 | 0.348708 | 1.27175 | 0.626011 | -0.253845 |
2021-01-06 | -0.816064 | 1.30197 | 0.656281 | -1.2718 |
1.5 nlargest()
选择某列最大的n行数据。如:df.nlargest(2,'A')
表示,返回A列最大的2行数据。
df.nlargest(2,'A')
展示表格如下:
A | B | C | D | |
---|---|---|---|---|
2021-01-02 | 0.696541 | 0.136352 | -1.64592 | -0.69841 |
2021-01-05 | 0.348708 | 1.27175 | 0.626011 | -0.253845 |
1.6 sample()
sample
方法表示查看随机的样例数据。
df.sample(5)
表示返回随机5行数据。
df.sample(5)
参数frac
表示fraction,分数的意思。frac=0.01即返回1%的随机数据作为样例展示。
df.sample(frac=0.01)
2. 选择数据
2.1 根据标签选择
我们输入df['A']
命令选取A列。
df['A']
输出A列数据,同时也是一个Series对象:
2021-01-01 0.270961
2021-01-02 0.696541
2021-01-03