4.数据分析-Pandas_①

本文介绍了Pandas的初识,详细讲解了Series和DataFrame的数据结构,包括它们的创建和属性。接着,讨论了基本数据操作,如索引、赋值和排序。还探讨了DataFrame的算术、逻辑和统计运算,以及自定义运算。最后提供了相关资料的网盘链接。
摘要由CSDN通过智能技术生成
import pandas as pd
# pd.Series(data=None,index=None,dtype=None)

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
# 以Numpy为基础,借力Numpy模块再计算方面的性能高的优势;基于matplotlib,能够简便的画图;独特的数据结构

#②为什么用Pandas
# 增强图表可读性;便捷的数据处理能力;读取文件方便,封装了matplotlib和numpy的画图和计算

二、Pandas数据结构

# Pandas有三种数据结构:Series、DataFrame、MuiltiLndex

2.1 Series

# Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。
# ·参数:
# o data:传入的数据,可以是ndarray、list等
# o index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从O-N的整数索引。
# o dtype:数据的类型

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的属性

#index属性(获取索引值)
d_s.index
Index(['red', 'blue', 'green', 'yellow'], dtype='object')
#values属性(获取内容值)
d_s.values
array([100.,  20.,  50.,  70.], dtype=float32)

2.2 DataFrame

# DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引
# ·行索引,表明不同行,横向索引,叫index,0轴,axis=O
# ·列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

# ·参数:
# 。index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引
# 。columns:列标签。如果没有传入索引参数,则默认会自动创建一个从O-N的整数索引
# 。通过已有数据创建

2.2.1 DataFrame的创建

pd.DataFrame(np.random.randn(2,3))
012
00.2721340.434924-1.632143
12.1362760.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
01234
05781549468
17383414075
27399445173
36672626244
47781787391
56065826183
69178649584
77463864787
85285645186
97096597072
#构建行索引
subject =['语文','数学','英语','物理','政治']

#构建列索引
stu = ['同学'+str(i) for i in range(score_df.shape[0])]

#添加行索引
data = pd.DataFrame(score,columns=subject,index=stu)
data
语文数学英语物理政治
同学05781549468
同学17383414075
同学27399445173
同学36672626244
同学47781787391
同学56065826183
同学69178649584
同学77463864787
同学85285645186
同学97096597072

2.2.2 Dataframe属性

# values 获取value值
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]])
# columns 获取标签值
data.columns
Index(['语文', '数学', '英语', '物理', '政治'], dtype='object')
#T 将DataFrame转置
data.T
同学0同学1同学2同学3同学4同学5同学6同学7同学8同学9
语文57737366776091745270
数学81839972816578638596
英语54414462788264866459
物理94405162736195475170
政治68757344918384878672
# head 获取前x行数据
data.head(2)
语文数学英语物理政治
同学05781549468
同学17383414075
#tail 获取后x行数据
data.tail(3)
语文数学英语物理政治
同学77463864787
同学85285645186
同学97096597072

三、基本数据操作

# 读取数据
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]
# data[2][3]
'邢台'

3.1.2 结合loc或者iloc使用索引

# 使用loc:只能指定行列索引的名字
data.loc[300:305,"城市"]
data.loc[data.index[0:5],"城市"]
0    邢台
1    邢台
2    邢台
3    邢台
4    邢台
Name: 城市, dtype: object
#使用iloc可以通过索引的下标去获取
data.iloc[:6,:2]
data.iloc[0:6,data.columns.get_indexer(['城市','景点'])]
城市景点
0邢台天河山
1邢台邢台峡谷群
2邢台九龙峡
3邢台天梯山景区
4邢台崆山白云洞
5邢台云梦山风景区

3.2 赋值

#对DataFrame当中的列属性进行重新赋值
data['城市'][5] = 6
data['城市'].head(10)
0    邢台
1    邢台
2    邢台
3    邢台
4    邢台
5     6
6    邢台
7    正定
8    正定
9    正定
Name: 城市, dtype: object
#通过 .列属性值 进行重新赋值 这里的属性要用英文
# data.city = 6

3.3 排序

3.3.1 DataFrame排序

# 使用data.sort_values(by=,ascending=)
#by:指定排序参考的键
#ascending:True升序、False降序(默认升序)
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()索引排序
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排序

#。使用series.sort_values(ascending=True)进行排序
# series排序时,只有一列,不需要参数
data['城市'].sort_values(ascending=True).head()
336    三明
337    三明
338    三明
339    三明
340    三明
Name: 城市, dtype: object
# 使用series.sort_index()进行排序
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)
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
2018-02-2723.5325.8824.1623.5395578.030.632.6822.94222.14222.87553782.6446738.6555576.112.39
2018-02-2622.8023.7823.5322.8060985.110.693.0222.40621.95522.94240827.5242736.3456007.501.53
2018-02-2322.8823.3722.8222.7152914.010.542.4221.93821.92923.02235119.5841871.9756372.851.32
2018-02-2222.2522.7622.2822.0236105.010.361.6421.44621.90923.13735397.5839904.7860149.600.90
2018-02-1421.4921.9921.9221.4823331.040.442.0521.36621.92323.25333590.2142935.7461716.110.58
2018-02-1321.4021.9021.4821.3130802.450.281.3221.34222.10323.38739694.6545518.1465161.680.77
2018-02-1220.7021.4021.1920.6332445.390.824.0321.50422.33823.53344645.1645679.9468686.330.81
2018-02-0921.2021.4620.3620.1954304.01-1.50-6.8621.92022.59623.64548624.3648982.3870552.471.36
2018-02-0821.7922.0921.8821.7527068.160.090.4122.37223.00923.83944411.9848612.1673852.450.68
2018-02-0722.6923.1121.8021.2953853.25-0.50-2.2422.48023.25823.92952281.2856315.1174925.331.35

4.1 算术运算

# add(other) 进行数学运算上的加法
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
# sub(other) 进行数学运算上的减法
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的日期数据
# data["open"] > 23返回逻辑结果 满足为True 不满足为False
(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()
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
2018-02-2723.5325.8824.1623.5395578.030.632.6822.94222.14222.87553782.6446738.6555576.112.39
2018-02-0123.7123.8622.4222.2266414.64-1.30-5.4823.64624.36524.27952812.3580394.4388480.921.66
2018-01-3123.8523.9823.7223.3149155.02-0.11-0.4624.03624.58324.41160348.9480496.4891666.751.23
2018-01-3023.7124.0823.8323.7032420.430.050.2124.35024.67124.36577485.5384805.2392943.350.81
2018-01-2924.4024.6323.7723.7265469.81-0.73-2.9824.68424.72824.29491842.6091692.7393456.221.64
#完成多个逻辑判断,
data[(data["open"] > 23) & (data["open"] < 24)].head()
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
2018-02-2723.5325.8824.1623.5395578.030.632.6822.94222.14222.87553782.6446738.6555576.112.39
2018-02-0123.7123.8622.4222.2266414.64-1.30-5.4823.64624.36524.27952812.3580394.4388480.921.66
2018-01-3123.8523.9823.7223.3149155.02-0.11-0.4624.03624.58324.41160348.9480496.4891666.751.23
2018-01-3023.7124.0823.8323.7032420.430.050.2124.35024.67124.36577485.5384805.2392943.350.81
2018-01-1623.4024.6024.4023.30101295.420.964.1023.90824.05823.32182003.73101081.4774590.922.54

4.2.2 逻辑运算函数

# query(expr) 
# expr:查询字符串
data.query("open<24 & open>23").head()
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
2018-02-2723.5325.8824.1623.5395578.030.632.6822.94222.14222.87553782.6446738.6555576.112.39
2018-02-0123.7123.8622.4222.2266414.64-1.30-5.4823.64624.36524.27952812.3580394.4388480.921.66
2018-01-3123.8523.9823.7223.3149155.02-0.11-0.4624.03624.58324.41160348.9480496.4891666.751.23
2018-01-3023.7124.0823.8323.7032420.430.050.2124.35024.67124.36577485.5384805.2392943.350.81
2018-01-1623.4024.6024.4023.30101295.420.964.1023.90824.05823.32182003.73101081.4774590.922.54
#isin(values)  判断values是否在所要查询的内容中
# 可以指定值进行一个判断,从而进行筛选操作 
data[data["open"].isin([23.85])]
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
2018-01-3123.8523.9823.7223.3149155.02-0.11-0.4624.03624.58324.41160348.9480496.4891666.751.23
2015-11-2623.8524.0823.5323.5051446.29-0.31-1.3023.71024.35723.39574550.04110489.85109815.491.76

4.3 统计运算

4.3.1 describe

#综合分析: 能够直接得出很多统计结果, count , mean , std , min , max 等
# 计算平均值、标准差、最大值、最小值
data.describe()
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
count643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000643.000000
mean21.27270621.90051321.33626720.77183599905.5191140.0188020.19028021.30236221.26765621.200946100008.642691100287.542177100797.5183982.936190
std3.9309734.0775783.9428063.79196873879.1193540.8984764.0796983.8806403.8136023.68618662761.57832656759.08206050101.5756392.079375
min12.25000012.67000012.36000012.2000001158.120000-3.520000-10.03000012.52000012.52000012.52000010804.74000019130.51000023311.0000000.040000
25%19.00000019.50000019.04500018.52500048533.210000-0.390000-1.85000018.99000019.10200019.27500055794.98500059861.95500064103.6750001.360000
50%21.44000021.97000021.45000020.98000083175.9300000.0500000.26000021.50400021.62300021.53000086133.33000089234.97000096291.7300002.500000
75%23.40000024.06500023.41500022.850000127580.0550000.4550002.30500023.31800023.09850023.136000127655.655000124693.255000124001.0150003.915000
max34.99000036.35000035.21000034.010000501915.4100003.03000010.03000033.69600032.18600029.998000404443.540000360028.160000269280.79000012.560000

4.3.2 统计函数

# Numpy当中已经详细介绍,在这里我们演示
# min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数),idxmax()、idxmin()最小最大值的位置
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 累计统计函数

# cumsum    =>  计算前1/2/3/…/n个数的和 
# cummax    =>  计算前1/2/3/…/n个数的最大值 
# cummin    =>  计算前1/2/3/…/n个数的最小值 
# cumprod   =>  计算前1/2/3/…/n个数的积
#制作一个买入量的曲线图
# 0.先预处理数据(进行排序)
d_s = data.sort_index()  #因为是按照时间的索引值,所以直接用索引排序 或者data.sort_values('open',ascending=True)

# 1.通过指定列属性进行累加统计
stock_rise = data['p_change'].cumsum()

# 2.plot方法集成了前面直方图、条形图、饼图、折线图 
import matplotlib.pyplot as plt 

# 3.plot显示图形 
stock_rise.plot() 

# 4.需要调用show,才能显示出结果 
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)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTZsV0gX-1625641975990)(output_65_1.png)]

4.4 自定义运算

# apply(func, axis=0) 
#     func:自定义函数 
#     axis=0:默认是列,axis=1为行进行运算 
# 定义一个对列,最大值-最小值的函数
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Padaz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值