import pandas as pd
import numpy as np
import matplotlib. pyplot as plt
import random
from pylab import mpl
mpl. rcParams[ "font.sans-serif" ] = [ "SimHei" ]
mpl. rcParams[ "axes.unicode_minus" ] = False
一、Pandas初识
二、Pandas数据结构
2.1 Series
2.1.1 Series创建
pd. Series( np. arange( 10 ) )
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int32
pd. Series( [ 'a' , 'b' , 'c' , 'd' , 'e' ] , index= [ 1 , 2 , 3 , 4 , 5 ] )
1 a
2 b
3 c
4 d
5 e
dtype: object
d_s = pd. Series( { 'red' : 100 , "blue" : 20 , "green" : 50 , "yellow" : 70 } , dtype= np. float32)
d_s
red 100.0
blue 20.0
green 50.0
yellow 70.0
dtype: float32
2.1.2 Series的属性
d_s. index
Index(['red', 'blue', 'green', 'yellow'], dtype='object')
d_s. values
array([100., 20., 50., 70.], dtype=float32)
2.2 DataFrame
2.2.1 DataFrame的创建
pd. DataFrame( np. random. randn( 2 , 3 ) )
0 1 2 0 0.272134 0.434924 -1.632143 1 2.136276 0.413088 -1.156421
score = np. random. randint( 40 , 100 , ( 10 , 5 ) )
score
array([[57, 81, 54, 94, 68],
[73, 83, 41, 40, 75],
[73, 99, 44, 51, 73],
[66, 72, 62, 62, 44],
[77, 81, 78, 73, 91],
[60, 65, 82, 61, 83],
[91, 78, 64, 95, 84],
[74, 63, 86, 47, 87],
[52, 85, 64, 51, 86],
[70, 96, 59, 70, 72]])
score_df = pd. DataFrame( score)
score_df
0 1 2 3 4 0 57 81 54 94 68 1 73 83 41 40 75 2 73 99 44 51 73 3 66 72 62 62 44 4 77 81 78 73 91 5 60 65 82 61 83 6 91 78 64 95 84 7 74 63 86 47 87 8 52 85 64 51 86 9 70 96 59 70 72
subject = [ '语文' , '数学' , '英语' , '物理' , '政治' ]
stu = [ '同学' + str ( i) for i in range ( score_df. shape[ 0 ] ) ]
data = pd. DataFrame( score, columns= subject, index= stu)
data
语文 数学 英语 物理 政治 同学0 57 81 54 94 68 同学1 73 83 41 40 75 同学2 73 99 44 51 73 同学3 66 72 62 62 44 同学4 77 81 78 73 91 同学5 60 65 82 61 83 同学6 91 78 64 95 84 同学7 74 63 86 47 87 同学8 52 85 64 51 86 同学9 70 96 59 70 72
2.2.2 Dataframe属性
data. values
array([[57, 81, 54, 94, 68],
[73, 83, 41, 40, 75],
[73, 99, 44, 51, 73],
[66, 72, 62, 62, 44],
[77, 81, 78, 73, 91],
[60, 65, 82, 61, 83],
[91, 78, 64, 95, 84],
[74, 63, 86, 47, 87],
[52, 85, 64, 51, 86],
[70, 96, 59, 70, 72]])
data. columns
Index(['语文', '数学', '英语', '物理', '政治'], dtype='object')
data. T
同学0 同学1 同学2 同学3 同学4 同学5 同学6 同学7 同学8 同学9 语文 57 73 73 66 77 60 91 74 52 70 数学 81 83 99 72 81 65 78 63 85 96 英语 54 41 44 62 78 82 64 86 64 59 物理 94 40 51 62 73 61 95 47 51 70 政治 68 75 73 44 91 83 84 87 86 72
data. head( 2 )
语文 数学 英语 物理 政治 同学0 57 81 54 94 68 同学1 73 83 41 40 75
data. tail( 3 )
语文 数学 英语 物理 政治 同学7 74 63 86 47 87 同学8 52 85 64 51 86 同学9 70 96 59 70 72
三、基本数据操作
data = pd. read_excel( './5.Pandas_data.xlsx' , encoding= 'utf-8' )
data. head( 5 )
城市 景点 图片地址 景点资料 0 邢台 天河山 https://dimg06.c-ctrip.com/images/100b0q000000... 景点介绍\n\n天河山位于邢台市西侧,距离市区车程约70公里,是一处山清水秀的自然风景区。这... 1 邢台 邢台峡谷群 https://dimg04.c-ctrip.com/images/10021f000001... 景点介绍\n\n邢台峡谷群又称邢台大峡谷、太行奇峡群,位于邢台市西侧,距离邢台市区车程约70... 2 邢台 九龙峡 https://dimg04.c-ctrip.com/images/100u1f000001... 景点介绍\n\n九龙峡景区位于河北省邢台市邢台县西侧,距离市区车程约80公里,是一处以峡谷风... 3 邢台 天梯山景区 https://dimg07.c-ctrip.com/images/10090h000000... 景点介绍\n\n天梯山景区位于邢台市西郊,是邢台周边郊游登山的好去处。天梯山地貌险峻,石壁陡... 4 邢台 崆山白云洞 https://dimg04.c-ctrip.com/images/0100x1200085... 景点介绍\n\n崆山白云洞风景名胜区,位于邢台市临城县中部,是以天然溶洞白云洞为主体修建的地...
3.1 索引操作
3.1.1 直接使用行类索引(先列后行)
data[ '城市' ] [ 5 ]
'邢台'
3.1.2 结合loc或者iloc使用索引
data. loc[ 300 : 305 , "城市" ]
data. loc[ data. index[ 0 : 5 ] , "城市" ]
0 邢台
1 邢台
2 邢台
3 邢台
4 邢台
Name: 城市, dtype: object
data. iloc[ : 6 , : 2 ]
data. iloc[ 0 : 6 , data. columns. get_indexer( [ '城市' , '景点' ] ) ]
城市 景点 0 邢台 天河山 1 邢台 邢台峡谷群 2 邢台 九龙峡 3 邢台 天梯山景区 4 邢台 崆山白云洞 5 邢台 云梦山风景区
3.2 赋值
data[ '城市' ] [ 5 ] = 6
data[ '城市' ] . head( 10 )
0 邢台
1 邢台
2 邢台
3 邢台
4 邢台
5 6
6 邢台
7 正定
8 正定
9 正定
Name: 城市, dtype: object
3.3 排序
3.3.1 DataFrame排序
data. sort_values( by= '城市' , ascending= False ) . head( 5 )
data. sort_values( by= [ '城市' , '景点' ] )
城市 景点 图片地址 景点资料 341 三明 三亚湾 https://dimg07.c-ctrip.com/images/100r17000001... 景点介绍\n\n三亚湾是一片绵延22公里的海滩。虽然这里的沙质没有亚龙湾好,但这一带的住宿价... 336 三明 亚龙湾 https://dimg08.c-ctrip.com/images/fd/tg/g3/M02... 景点介绍\n\n亚龙湾的海水蔚蓝清澈,沙质洁白如玉,年平均海水温度22-25.1°C,终年可... 342 三明 亚龙湾热带天堂森林公园 https://dimg08.c-ctrip.com/images/350618000001... 景点介绍\n\n亚龙湾热带天堂森林公园景区位于亚龙湾国家旅游度假区内,电影《非诚勿扰II》、... 339 三明 大东海 https://dimg05.c-ctrip.com/images/10090f000000... 景点介绍\n\n大东海是三亚离市中心比较近的一个海湾,交通、用餐和住宿都比较便利。虽然沙质和... 338 三明 天涯海角 https://dimg02.c-ctrip.com/images/350l15000000... 景点介绍\n\n天涯海角位于三亚湾西端,是一片宁静美丽的海滩。海滩上耸立着许多形态各异的岩石... ... ... ... ... ... 153 龙井 天佛指山保护区 https://dimg07.c-ctrip.com/images/100h1d000001... 景点介绍\n\n吉林天佛指山自然保护区地处龙井市境内,东南部与朝鲜隔图们江相望。该区以保护松... 152 龙井 汉王山 https://dimg08.c-ctrip.com/images/tg/477/940/9... 景点介绍\n\n汉王山主要景点有一线天、高阳坡、石官峡、鹿亭温泉、回龙寺、金鹿峡瀑布、金鹿长... 147 龙井 琵岩山 https://dimg08.c-ctrip.com/images/100g1f000001... 景点介绍\n\n琵岩山位于龙井市西南部,距龙井市中心区3公里处,交通便利。它树木繁茂,江水环... 151 龙井 裕龙湾旅游风景区 https://dimg04.c-ctrip.com/images/10021f000001... 景点介绍\n\n裕龙湾旅游风景区位于延吉市和龙井市西侧,是集山水自然景观、玻璃吊桥、旱滑道等... 149 龙井 龙山朝鲜族民俗村 https://dimg06.c-ctrip.com/images/100k1f000001... 景点介绍\n\n 龙井市龙山朝鲜族民俗村在省人民政府和旅游部门的大力支持和帮助下,共投资60...
1121 rows × 4 columns
data. sort_index( )
城市 景点 图片地址 景点资料 0 邢台 天河山 https://dimg06.c-ctrip.com/images/100b0q000000... 景点介绍\n\n天河山位于邢台市西侧,距离市区车程约70公里,是一处山清水秀的自然风景区。这... 1 邢台 邢台峡谷群 https://dimg04.c-ctrip.com/images/10021f000001... 景点介绍\n\n邢台峡谷群又称邢台大峡谷、太行奇峡群,位于邢台市西侧,距离邢台市区车程约70... 2 邢台 九龙峡 https://dimg04.c-ctrip.com/images/100u1f000001... 景点介绍\n\n九龙峡景区位于河北省邢台市邢台县西侧,距离市区车程约80公里,是一处以峡谷风... 3 邢台 天梯山景区 https://dimg07.c-ctrip.com/images/10090h000000... 景点介绍\n\n天梯山景区位于邢台市西郊,是邢台周边郊游登山的好去处。天梯山地貌险峻,石壁陡... 4 邢台 崆山白云洞 https://dimg04.c-ctrip.com/images/0100x1200085... 景点介绍\n\n崆山白云洞风景名胜区,位于邢台市临城县中部,是以天然溶洞白云洞为主体修建的地... ... ... ... ... ... 1116 石河子 人民公园 https://dimg03.c-ctrip.com/images/100m0l000000... 景点介绍\n\n石河子市人民公园坐落在北三路与西一路交汇处的西南端,占地1平方公里,内辟林业... 1117 石河子 周恩来总理纪念碑 https://dimg08.c-ctrip.com/images/100h0i000000... 景点介绍\n\n周恩来总理纪念碑座落在石河子市北郊,距市中心3公里。纪念碑南侧是周恩来总理纪... 1118 石河子 音乐文化广场 https://dimg04.c-ctrip.com/images/tg/806/642/7... 景点介绍\n\n广场集花草树木、音乐喷泉、雕塑于一身。是石河子市民喜欢光顾的地方,也是来石河... 1119 石河子 音乐喷泉 https://dimg01.c-ctrip.com/images/tg/710/942/2... 景点介绍\n\n进入石河子游憩广场,首先映入眼帘的就是音乐喷泉。该音乐喷泉自1998年改建后... 1120 石河子 北湖公园 https://dimg07.c-ctrip.com/images/1A051b000001... 景点介绍\n\n这里建起了长廊、亭台、水上码头,配置了快艇、游船、水上摩托、水上降落平台,开...
1121 rows × 4 columns
3.3.2 Series排序
data[ '城市' ] . sort_values( ascending= True ) . head( )
336 三明
337 三明
338 三明
339 三明
340 三明
Name: 城市, dtype: object
data[ '城市' ] . sort_index( ascending= False ) . head( )
1120 石河子
1119 石河子
1118 石河子
1117 石河子
1116 石河子
Name: 城市, dtype: object
四、DataFrame运算
data = pd. read_csv( './5.stock_day.csv' , encoding= 'utf-8' )
data. head( 10 )
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover 2018-02-27 23.53 25.88 24.16 23.53 95578.03 0.63 2.68 22.942 22.142 22.875 53782.64 46738.65 55576.11 2.39 2018-02-26 22.80 23.78 23.53 22.80 60985.11 0.69 3.02 22.406 21.955 22.942 40827.52 42736.34 56007.50 1.53 2018-02-23 22.88 23.37 22.82 22.71 52914.01 0.54 2.42 21.938 21.929 23.022 35119.58 41871.97 56372.85 1.32 2018-02-22 22.25 22.76 22.28 22.02 36105.01 0.36 1.64 21.446 21.909 23.137 35397.58 39904.78 60149.60 0.90 2018-02-14 21.49 21.99 21.92 21.48 23331.04 0.44 2.05 21.366 21.923 23.253 33590.21 42935.74 61716.11 0.58 2018-02-13 21.40 21.90 21.48 21.31 30802.45 0.28 1.32 21.342 22.103 23.387 39694.65 45518.14 65161.68 0.77 2018-02-12 20.70 21.40 21.19 20.63 32445.39 0.82 4.03 21.504 22.338 23.533 44645.16 45679.94 68686.33 0.81 2018-02-09 21.20 21.46 20.36 20.19 54304.01 -1.50 -6.86 21.920 22.596 23.645 48624.36 48982.38 70552.47 1.36 2018-02-08 21.79 22.09 21.88 21.75 27068.16 0.09 0.41 22.372 23.009 23.839 44411.98 48612.16 73852.45 0.68 2018-02-07 22.69 23.11 21.80 21.29 53853.25 -0.50 -2.24 22.480 23.258 23.929 52281.28 56315.11 74925.33 1.35
4.1 算术运算
data[ 'open' ] . add( 1 ) . head( )
2018-02-27 24.53
2018-02-26 23.80
2018-02-23 23.88
2018-02-22 23.25
2018-02-14 22.49
Name: open, dtype: float64
data[ 'open' ] . sub( 1 ) . head( )
2018-02-27 22.53
2018-02-26 21.80
2018-02-23 21.88
2018-02-22 21.25
2018-02-14 20.49
Name: open, dtype: float64
4.2 逻辑运算
4.2.1 逻辑运算符号
( data[ "open" ] > 23 ) . head( )
2018-02-27 True
2018-02-26 False
2018-02-23 False
2018-02-22 False
2018-02-14 False
Name: open, dtype: bool
data[ data[ "open" ] > 23 ] . head( )
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover 2018-02-27 23.53 25.88 24.16 23.53 95578.03 0.63 2.68 22.942 22.142 22.875 53782.64 46738.65 55576.11 2.39 2018-02-01 23.71 23.86 22.42 22.22 66414.64 -1.30 -5.48 23.646 24.365 24.279 52812.35 80394.43 88480.92 1.66 2018-01-31 23.85 23.98 23.72 23.31 49155.02 -0.11 -0.46 24.036 24.583 24.411 60348.94 80496.48 91666.75 1.23 2018-01-30 23.71 24.08 23.83 23.70 32420.43 0.05 0.21 24.350 24.671 24.365 77485.53 84805.23 92943.35 0.81 2018-01-29 24.40 24.63 23.77 23.72 65469.81 -0.73 -2.98 24.684 24.728 24.294 91842.60 91692.73 93456.22 1.64
data[ ( data[ "open" ] > 23 ) & ( data[ "open" ] < 24 ) ] . head( )
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover 2018-02-27 23.53 25.88 24.16 23.53 95578.03 0.63 2.68 22.942 22.142 22.875 53782.64 46738.65 55576.11 2.39 2018-02-01 23.71 23.86 22.42 22.22 66414.64 -1.30 -5.48 23.646 24.365 24.279 52812.35 80394.43 88480.92 1.66 2018-01-31 23.85 23.98 23.72 23.31 49155.02 -0.11 -0.46 24.036 24.583 24.411 60348.94 80496.48 91666.75 1.23 2018-01-30 23.71 24.08 23.83 23.70 32420.43 0.05 0.21 24.350 24.671 24.365 77485.53 84805.23 92943.35 0.81 2018-01-16 23.40 24.60 24.40 23.30 101295.42 0.96 4.10 23.908 24.058 23.321 82003.73 101081.47 74590.92 2.54
4.2.2 逻辑运算函数
data. query( "open<24 & open>23" ) . head( )
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover 2018-02-27 23.53 25.88 24.16 23.53 95578.03 0.63 2.68 22.942 22.142 22.875 53782.64 46738.65 55576.11 2.39 2018-02-01 23.71 23.86 22.42 22.22 66414.64 -1.30 -5.48 23.646 24.365 24.279 52812.35 80394.43 88480.92 1.66 2018-01-31 23.85 23.98 23.72 23.31 49155.02 -0.11 -0.46 24.036 24.583 24.411 60348.94 80496.48 91666.75 1.23 2018-01-30 23.71 24.08 23.83 23.70 32420.43 0.05 0.21 24.350 24.671 24.365 77485.53 84805.23 92943.35 0.81 2018-01-16 23.40 24.60 24.40 23.30 101295.42 0.96 4.10 23.908 24.058 23.321 82003.73 101081.47 74590.92 2.54
data[ data[ "open" ] . isin( [ 23.85 ] ) ]
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover 2018-01-31 23.85 23.98 23.72 23.31 49155.02 -0.11 -0.46 24.036 24.583 24.411 60348.94 80496.48 91666.75 1.23 2015-11-26 23.85 24.08 23.53 23.50 51446.29 -0.31 -1.30 23.710 24.357 23.395 74550.04 110489.85 109815.49 1.76
4.3 统计运算
4.3.1 describe
data. describe( )
open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover count 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 643.000000 mean 21.272706 21.900513 21.336267 20.771835 99905.519114 0.018802 0.190280 21.302362 21.267656 21.200946 100008.642691 100287.542177 100797.518398 2.936190 std 3.930973 4.077578 3.942806 3.791968 73879.119354 0.898476 4.079698 3.880640 3.813602 3.686186 62761.578326 56759.082060 50101.575639 2.079375 min 12.250000 12.670000 12.360000 12.200000 1158.120000 -3.520000 -10.030000 12.520000 12.520000 12.520000 10804.740000 19130.510000 23311.000000 0.040000 25% 19.000000 19.500000 19.045000 18.525000 48533.210000 -0.390000 -1.850000 18.990000 19.102000 19.275000 55794.985000 59861.955000 64103.675000 1.360000 50% 21.440000 21.970000 21.450000 20.980000 83175.930000 0.050000 0.260000 21.504000 21.623000 21.530000 86133.330000 89234.970000 96291.730000 2.500000 75% 23.400000 24.065000 23.415000 22.850000 127580.055000 0.455000 2.305000 23.318000 23.098500 23.136000 127655.655000 124693.255000 124001.015000 3.915000 max 34.990000 36.350000 35.210000 34.010000 501915.410000 3.030000 10.030000 33.696000 32.186000 29.998000 404443.540000 360028.160000 269280.790000 12.560000
4.3.2 统计函数
data. min ( ) , data. idxmax( )
(open 12.25
high 12.67
close 12.36
low 12.20
volume 1158.12
price_change -3.52
p_change -10.03
ma5 12.52
ma10 12.52
ma20 12.52
v_ma5 10804.74
v_ma10 19130.51
v_ma20 23311.00
turnover 0.04
dtype: float64,
open 2015-06-15
high 2015-06-10
close 2015-06-12
low 2015-06-12
volume 2017-10-26
price_change 2015-06-09
p_change 2015-08-28
ma5 2015-06-15
ma10 2015-06-18
ma20 2015-06-18
v_ma5 2017-10-26
v_ma10 2017-11-02
v_ma20 2017-11-15
turnover 2017-10-26
dtype: object)
4.3.3 累计统计函数
d_s = data. sort_index( )
stock_rise = data[ 'p_change' ] . cumsum( )
import matplotlib. pyplot as plt
stock_rise. plot( )
plt. show( )
D:\Anaconda3\lib\site-packages\pandas\plotting\_matplotlib\core.py:1192: UserWarning: FixedFormatter should only be used together with FixedLocator
ax.set_xticklabels(xticklabels)
4.4 自定义运算
data[ [ 'open' , 'close' ] ] . apply ( lambda x: x. max ( ) - x. min ( ) , axis= 0 )
open 22.74
close 22.85
dtype: float64
五、资料网盘
百度云盘:https://pan.baidu.com/s/1puAwMn8QFGiUcrmQtnoiPw ; 提取码:echo