Pandas是基于NumPy 的一种工具,其出现是为了解决数据分析任务。
Pandas吸纳了大量库和一些标准的数据模型,提供了高效操作大型数据集所需的工具。
Pandas中的函数和方法能够使我们快速便捷地处理数据。
它是使Python成为强大而高效的数据分析环境的重要因素之一。
http://pandas.pydata.org/pandas-docs/stable/api.html
序列Series是一个一维数组结构,可以存入任一种Python数据类型(integers, strings, floating point numbers, Python objects, 等等)
序列Series由两部分构成,一个是index,另一个是对应的值,注意两者的长度必须一样。序列Series和数组array很类似,大多数numpy的函数都可以直接应用与序列Series
序列Series也像一个固定大小的字典dict,可以通过index来赋值或者取值
数据框DataFrame是一个二维数组结构,可以存入任一种Python数据类型(integers, strings, floating point numbers, Python objects, 等等)
数据框DataFrame由三部分构成,一个是行索引index,一个是列名,另一个则是取值。
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
state | year | pop | |
---|---|---|---|
0 | Ohio | 2000 | 1.5 |
1 | Ohio | 2001 | 1.7 |
2 | Ohio | 2002 | 3.6 |
3 | Nevada | 2001 | 2.4 |
4 | Nevada | 2002 | 2.9 |
x1 | x2 | x3 | x4 | 新列 | |
---|---|---|---|---|---|
0 | 84 | 96 | 51 | 91 | HAHA |
1 | 73 | 35 | 53 | 66 | HAHA |
2 | 31 | 83 | 46 | 87 | HAHA |
3 | 3 | 16 | 74 | 69 | HAHA |
4 | 88 | 29 | 37 | 67 | HAHA |
5 | 90 | 88 | 83 | 86 | HAHA |
6 | 1 | 46 | 3 | 63 | HAHA |
7 | 53 | 33 | 31 | 87 | HAHA |
8 | 40 | 80 | 5 | 1 | HAHA |
9 | 15 | 67 | 36 | 97 | HAHA |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
x1 | 84 | 73 | 31 | 3 | 88 | 90 | 1 | 53 | 40 | 15 |
x2 | 96 | 35 | 83 | 16 | 29 | 88 | 46 | 33 | 80 | 67 |
x3 | 51 | 53 | 46 | 74 | 37 | 83 | 3 | 31 | 5 | 36 |
x4 | 91 | 66 | 87 | 69 | 67 | 86 | 63 | 87 | 1 | 97 |
新列 | HAHA | HAHA | HAHA | HAHA | HAHA | HAHA | HAHA | HAHA | HAHA | HAHA |
x3 | x4 | |
---|---|---|
0 | 65 | 44 |
1 | 12 | 51 |
2 | 64 | 35 |
3 | 77 | 30 |
例如下面这个数据框data,其中就存在缺失值
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | NaN | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | None | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
2 | 3.6 | Ohio | 2002 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | NaN | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | None | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | NaN | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | None | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
2 | 3.6 | Ohio | 2002 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | NaN | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | None | 2001 |
4 | 2.9 | Nevada | 2002 |
上面对缺失值的处理都是将缺失值剔除,下面介绍了填充缺失值的方法
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | NaN | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | None | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 0.0 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | 0 | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.5 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Ohio | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 3.6 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
pop | state | year | |
---|---|---|---|
2 | 3.6 | Ohio | 2002 |
4 | 2.9 | Nevada | 2002 |
3 | 2.4 | Nevada | 2001 |
1 | 1.7 | Ohio | 2001 |
0 | 1.5 | Ohio | 2000 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
2 | 3.6 | Ohio | 2002 |
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
函数汇总
下面的函数都是通过数据框.函数名(参数设置)来进行调用,一般的参数是axis=0/1,选择为0则是按行来实现函数,1则是按列来实现函数
序号 | 函数 | 函数含义 |
---|---|---|
1 | count | 计数非na值 |
2 | describe | 针对Series或个DataFrame列基本描述统计 |
3 | min、max | 计算最小值和最大值 |
4 | argmin、argmax | 获取到最大值和最小值的索引位置(整数) |
5 | idxmin、idxmax | 计算能够获取到最大值和最小值得索引值 |
6 | quantile | 计算样本的分位数(0到1) |
7 | sum | 求和 |
8 | mean | 求平均数 |
9 | median | 求中位数(50%分位数) |
10 | mad | 计算平均绝对离差 |
11 | var | 样本方差 |
12 | std | 样本标准差 |
13 | skew | 样本偏度(三阶矩) |
14 | kurt | 样本峰度(四阶矩) |
15 | cumsum | 样本累计和 |
16 | cummin,cummax | 样本累计最大值和累计最小值 |
17 | cumprod | 样本累计积 |
18 | diff | 计算一阶差分 |
19 | pct_change | 计算百分数变化 |
20 | corr | 计数相关性 |
下面介绍了三个函数来实现数据框的拼接功能——concat函数,merge函数和join函数
x1 | x2 | x3 | |
---|---|---|---|
a | 0.194063 | -0.775257 | 0.750544 |
b | -0.362398 | -0.256831 | 1.845307 |
c | 0.440129 | -0.973812 | 1.266275 |
d | 0.310613 | -0.830704 | 1.210340 |
x1 | x2 | x3 | |
---|---|---|---|
e | -0.578014 | 1.033819 | 1.613378 |
f | 0.769962 | 0.079661 | 0.686825 |
g | -0.149230 | 0.940921 | 0.443839 |
h | -1.430560 | -0.924091 | 0.499845 |
x1 | x2 | x3 | |
---|---|---|---|
a | 0.194063 | -0.775257 | 0.750544 |
b | -0.362398 | -0.256831 | 1.845307 |
c | 0.440129 | -0.973812 | 1.266275 |
d | 0.310613 | -0.830704 | 1.210340 |
e | -0.578014 | 1.033819 | 1.613378 |
f | 0.769962 | 0.079661 | 0.686825 |
g | -0.149230 | 0.940921 | 0.443839 |
h | -1.430560 | -0.924091 | 0.499845 |
x1 | x2 | x3 | |
---|---|---|---|
a | 0.994641 | -1.062699 | 0.033700 |
b | -0.538477 | -0.739688 | 0.495250 |
c | 0.111017 | 0.689445 | 0.972465 |
d | -0.954307 | 0.423636 | -1.295699 |
x1 | x3 | x4 | |
---|---|---|---|
a | 1.365262 | -1.844937 | -2.072812 |
b | -0.772867 | 0.201976 | -0.024210 |
c | -0.349105 | -0.763815 | 0.135989 |
e | -0.163869 | -0.723870 | 1.043185 |
pd.merge一般针对的是按列合并。
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)
time | x1 | x2 | |
---|---|---|---|
0 | 2017-09-11 | 1 | 2 |
1 | 2017-09-12 | 2 | 2 |
2 | 2017-09-13 | 3 | 1 |
time | x3 | x4 | |
---|---|---|---|
0 | 2017-09-10 | -1 | 2 |
1 | 2017-09-11 | -1 | -100 |
2 | 2017-09-12 | 10 | 0 |
希望将上面两个数据框left_data和right_data拼接起来,但要求是按照时间来进行拼接
time | x1 | x2 | x3 | x4 | |
---|---|---|---|---|---|
0 | 2017-09-11 | 1 | 2 | -1 | -100 |
1 | 2017-09-12 | 2 | 2 | 10 | 0 |
time | x1 | x2 | x3 | x4 | |
---|---|---|---|---|---|
0 | 2017-09-11 | 1.0 | 2.0 | -1.0 | -100.0 |
1 | 2017-09-12 | 2.0 | 2.0 | 10.0 | 0.0 |
2 | 2017-09-13 | 3.0 | 1.0 | NaN | NaN |
3 | 2017-09-10 | NaN | NaN | -1.0 | 2.0 |
time | x1 | x2 | x3 | x4 | 数据来源 | |
---|---|---|---|---|---|---|
0 | 2017-09-11 | 1.0 | 2.0 | -1.0 | -100.0 | both |
1 | 2017-09-12 | 2.0 | 2.0 | 10.0 | 0.0 | both |
2 | 2017-09-13 | 3.0 | 1.0 | NaN | NaN | left_only |
3 | 2017-09-10 | NaN | NaN | -1.0 | 2.0 | right_only |
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
time | x1 | x2 | |
---|---|---|---|
0 | 2017-09-11 | 1 | 2 |
1 | 2017-09-12 | 2 | 2 |
2 | 2017-09-13 | 3 | 1 |
time | x2 | x4 | |
---|---|---|---|
0 | 2017-09-10 | -1 | 2 |
1 | 2017-09-11 | -1 | -100 |
2 | 2017-09-12 | 10 | 0 |
time_left | x1 | x2_left | time_right | x2_right | x4 | |
---|---|---|---|---|---|---|
0 | 2017-09-11 | 1 | 2 | 2017-09-10 | -1 | 2 |
1 | 2017-09-12 | 2 | 2 | 2017-09-11 | -1 | -100 |
2 | 2017-09-13 | 3 | 1 | 2017-09-12 | 10 | 0 |
有时候,希望能够剔除掉数据框中的重复记录
time | x1 | x2 | |
---|---|---|---|
0 | 2017-09-11 | 1 | 2 |
1 | 2017-09-12 | 2 | 2 |
2 | 2017-09-13 | 3 | 1 |
0 | 2017-09-11 | 1 | 2 |
1 | 2017-09-12 | 2 | 2 |
2 | 2017-09-13 | 3 | 1 |
time | x1 | x2 | |
---|---|---|---|
0 | 2017-09-11 | 1 | 2 |
1 | 2017-09-12 | 2 | 2 |
2 | 2017-09-13 | 3 | 1 |
在进行数据分析之前,可能需要读写自己的数据文件。或者在完成数据分析之后,想把结果输出到外部的文件
在Python中,利用pandas模块中的几个函数,可以轻松实现这些功能,利用pandas读取文件之后数据的格式为数据框,且如果想用pandas将数据输出为外部文件,也要先确保要输出的文件的格式为数据框
注意在运行下面的程序之前,需要确保文件已经在目录下,这里需要将文件上传到万矿网的数据文件目录
x1 | x2 | x3 | y | |
---|---|---|---|---|
day | ||||
0 | 1 | 2 | 3 | 0 |
1 | 2 | 2 | 2 | 1 |
2 | 3 | 1 | 1 | 1 |
3 | 2 | 1 | 1 | 0 |
代码 | 名称 | 证券简称 | 上市日期 | 所属申万行业 | 近10日涨跌幅 | 近1月涨跌幅 | 近3月涨跌幅 | |
---|---|---|---|---|---|---|---|---|
0 | 002161.SZ | 远望谷 | 远望谷 | 2007-08-21 | 其他电子Ⅲ | -1.411290 | -13.143872 | -20.681265 |
1 | 002162.SZ | 悦心健康 | 悦心健康 | 2007-08-23 | 其他建材Ⅲ | -2.460457 | -7.035176 | -7.960199 |
2 | 002699.SZ | 美盛文化 | 美盛文化 | 2012-09-11 | 其他服装 | -1.148796 | -3.317282 | 33.357934 |
3 | 600009.SH | 上海机场 | 上海机场 | 1998-02-18 | 机场Ⅲ | -1.872321 | 8.641359 | 17.823843 |
4 | 600115.SH | 东方航空 | 东方航空 | 1997-11-05 | 航空运输Ⅲ | 1.183432 | 3.012048 | 1.333333 |
代码 | 名称 | 证券简称 | 上市日期 | 所属申万行业 | 近10日涨跌幅 | 近1月涨跌幅 | 近3月涨跌幅 | |
---|---|---|---|---|---|---|---|---|
0 | 002161.SZ | 远望谷 | 远望谷 | 2007-08-21 | 其他电子Ⅲ | -1.4113 | -13.1439 | -20.6813 |
1 | 002162.SZ | 悦心健康 | 悦心健康 | 2007-08-23 | 其他建材Ⅲ | -2.4605 | -7.0352 | -7.9602 |
2 | 002699.SZ | 美盛文化 | 美盛文化 | 2012-09-11 | 其他服装 | -1.1488 | -3.3173 | 33.3579 |
3 | 600009.SH | 上海机场 | 上海机场 | 1998-02-18 | 机场Ⅲ | -1.8723 | 8.6414 | 17.8238 |
4 | 600115.SH | 东方航空 | 东方航空 | 1997-11-05 | 航空运输Ⅲ | 1.1834 | 3.0120 | 1.3333 |
由于使用了pandas库,我们在将想要的数据集输出为外部的excel/csv文件时,首先要确保文件的格式为数据框
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
例如下面这个数据框data,希望根据地域或者性别来分组再进行数据分析
x1 | x2 | 地域 | 性别 | |
---|---|---|---|---|
0 | 1.5 | 1.051528 | 上海 | 男 |
1 | 1.7 | -0.578360 | 上海 | 女 |
2 | 3.6 | -1.102818 | 非上海 | 男 |
3 | 2.4 | -1.833841 | 非上海 | 女 |
4 | 2.9 | -0.881658 | 上海 | 男 |
5 | 2.2 | 0.733615 | 非上海 | 女 |
6 | 100.0 | 0.560502 | 上海 | 女 |
7 | 2.0 | -0.024478 | 上海 | 男 |
8 | 0.0 | -2.407576 | 上海 | 男 |
x1 | x2 | |
---|---|---|
地域 | ||
上海 | 18.016667 | -0.380007 |
非上海 | 2.733333 | -0.734348 |
x1 | x2 | ||
---|---|---|---|
地域 | |||
上海 | count | 6.000000 | 6.000000 |
mean | 18.016667 | -0.380007 | |
std | 40.174490 | 1.221662 | |
min | 0.000000 | -2.407576 | |
25% | 1.550000 | -0.805834 | |
50% | 1.850000 | -0.301419 | |
75% | 2.675000 | 0.414257 | |
max | 100.000000 | 1.051528 | |
非上海 | count | 3.000000 | 3.000000 |
mean | 2.733333 | -0.734348 | |
std | 0.757188 | 1.322795 | |
min | 2.200000 | -1.833841 | |
25% | 2.300000 | -1.468330 | |
50% | 2.400000 | -1.102818 | |
75% | 3.000000 | -0.184601 | |
max | 3.600000 | 0.733615 |
x1 | x2 | ||
---|---|---|---|
地域 | 性别 | ||
上海 | 女 | 50.85 | -1.430061 |
男 | 1.60 | -1.184690 | |
非上海 | 女 | 2.30 | 1.280905 |
男 | 3.60 | -0.555359 |
x1 | x2 | ||||||||
---|---|---|---|---|---|---|---|---|---|
count | mean | max | min | count | mean | max | min | ||
地域 | 性别 | ||||||||
上海 | 女 | 2 | 50.85 | 100.0 | 1.7 | 2 | -0.718903 | 0.494537 | -1.932343 |
男 | 4 | 1.60 | 2.9 | 0.0 | 4 | -0.299980 | 0.749233 | -0.885189 | |
非上海 | 女 | 2 | 2.30 | 2.4 | 2.2 | 2 | 0.466799 | 1.408701 | -0.475102 |
男 | 1 | 3.60 | 3.6 | 3.6 | 1 | -0.763343 | -0.763343 | -0.763343 |
x2 | x1 | ||||
---|---|---|---|---|---|
mean | sum | max | min | ||
地域 | 性别 | ||||
上海 | 女 | -1.430061 | 101.7 | 100.0 | 1.7 |
男 | -1.184690 | 6.4 | 2.9 | 0.0 | |
非上海 | 女 | 1.280905 | 4.6 | 2.4 | 2.2 |
男 | -0.555359 | 3.6 | 3.6 | 3.6 |
x1 | x2 | 地域 | 性别 | ||
---|---|---|---|---|---|
地域 | |||||
上海 | 6 | 100.0 | 0.494537 | 上海 | 女 |
7 | 2.0 | 0.749233 | 上海 | 男 | |
非上海 | 3 | 2.4 | -0.475102 | 非上海 | 女 |
5 | 2.2 | 1.408701 | 非上海 | 女 |
小例子——分组的线性回归
例如我们有如下数据集,希望按年分组,利用每一年的y对x进行回归
x | y | 年份 | |
---|---|---|---|
2011-01-01 | -0.421726 | 0.589447 | 2011 |
2011-01-02 | 2.420468 | 5.965670 | 2011 |
2011-01-03 | -1.763588 | -2.877965 | 2011 |
2011-01-04 | -0.837336 | -0.659005 | 2011 |
2011-01-05 | 0.431794 | 2.106538 | 2011 |
先对数据框by_year按年份进行分组
按年份分组后,求y和x之间的相关系数
按年份分组后,y对x进行回归
x | intercept | |
---|---|---|
年份 | ||
2011 | 2.004851 | 0.999689 |
2012 | 2.002299 | 1.010181 |
2013 | 2.014633 | 1.003604 |
2014 | 1.995806 | 0.995565 |
2015 | 1.984045 | 0.998795 |
2016 | 2.010113 | 1.012627 |
x1 | x2 | 地域 | 性别 | |
---|---|---|---|---|
0 | 1.5 | -0.025441 | 上海 | 男 |
1 | 1.7 | 1.003487 | 上海 | 女 |
2 | 3.6 | -0.194238 | 非上海 | 男 |
3 | 2.4 | -1.181589 | 非上海 | 女 |
4 | 2.9 | 0.095814 | 上海 | 男 |
5 | 2.2 | -0.717525 | 非上海 | 女 |
6 | 100.0 | -0.214724 | 上海 | 女 |
7 | 2.0 | 0.893789 | 上海 | 男 |
8 | 0.0 | 0.021405 | 上海 | 男 |
性别 | 女 | 男 |
---|---|---|
地域 | ||
上海 | 101.7 | 6.4 |
非上海 | 4.6 | 3.6 |
联系客服