本章使用還是金融數(shù)據(jù)集,不僅回顧的舊的知識點(diǎn),還拓展了一些新的內(nèi)容,主要的難點(diǎn)在于重置索引
reset_index()
,計(jì)算一列的差分diff()
,時間索引的操作,滑動窗口的使用rolling()
前期準(zhǔn)備
import pandas as pd
import numpy as np
# 導(dǎo)入繪圖工具
from matplotlib import pyplot as plt
# 使圖形中的中文正常編碼顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 使坐標(biāo)軸刻度表簽正常顯示正負(fù)號
plt.rcParams['axes.unicode_minus'] = False
# 導(dǎo)入數(shù)據(jù),刪除有任何空值的行
df = pd.read_excel(r'D:\Python work space\jupyter\Pandas必刷100道題\600000.SH.xls')
df.dropna(axis=0,how='any',inplace=True)
df
1. 以df的列名創(chuàng)建一個DataFrame
創(chuàng)建的DataFrame只有列名,并沒有數(shù)據(jù)
# 以df的列名創(chuàng)建一個DataFrame
temp = pd.DataFrame(columns=df.columns)
temp
2. 打印所有換手率為非數(shù)字的行
由表可知我們能夠發(fā)現(xiàn)還手率都是小數(shù),我們只需要判斷該元素的數(shù)據(jù)類型是否為float
類型
temp = [] # 存放所有的非數(shù)字的行號
for i in range(len(df)):
if type(df['換手率(%)'][i]) != float: # 判斷該元素的數(shù)據(jù)類型是不是float類型
temp.append(i) # 記錄不是數(shù)字的行索引
df.iloc[temp]
由圖我們可以知道 換手率非數(shù)字的值均為--
3. 刪除所有換手率為非數(shù)字的行
因?yàn)檫€手率的非數(shù)字行的會影響后面的分析,所以我們要將其刪除
本次例題因?yàn)楹竺嬷环治鲞€手率,所以就直接刪原數(shù)據(jù)了,但是在實(shí)際中,可能其他數(shù)據(jù)還有用,不能輕易的刪除
temp = [] # 存放所有的非數(shù)字的行號
for i in range(len(df)):
if type(df['換手率(%)'][i]) != float:
temp.append(i)
df= df.drop(labels=temp)
df
4. 重置df的行號
因?yàn)閯h除過部分行之后,索引就不連續(xù)了,不便于觀察數(shù)據(jù)一共有多少行,會影響一些分析,所以我們就要刪除一部分?jǐn)?shù)據(jù)
使用是reset_index
函數(shù)
參數(shù)
-
drop=True
刪除上次的索引,默認(rèn)不會刪除 -
inplace=True
修改原數(shù)據(jù),默認(rèn)不會修改原數(shù)據(jù),會返回一個新的對象
# 重置data的行號
df.reset_index(drop=True,inplace=True)
df
觀察最后幾行,能夠發(fā)現(xiàn)索引已經(jīng)更新
5. 繪制‘還手’密度曲線
繪制這個圖形主要是能夠讓我們直觀的觀察到還手率集中到那個地方
df['換手率(%)'].plot(kind='kde')
從圖中我們能夠直觀的發(fā)現(xiàn)數(shù)據(jù)多集中在0.0-0.2之間
6. 計(jì)算后一天和前一天收盤價的差值
- 使用
shift()
函數(shù)shift(n)
當(dāng)n
為正數(shù)該列向下移動n
行,當(dāng)n
負(fù)數(shù)時該列向上移動|n|
行
# 后一天減去前一天
df['收盤價(元)'] - df['收盤價(元)'].shift(1)
- 使用
diff()
函數(shù) 默認(rèn)為一階差分
進(jìn)一步簡化了同一列差值的計(jì)算df[].diff(n)
等價于df[] - df[]..shift(n)
df['收盤價(元)'].diff() # 默認(rèn)值為1,叫做一階差分
# 等價于df['收盤價(元)'] - df['收盤價(元)'].shift(1)
7. 計(jì)算后一天與前一天收盤價的變化率
pct_change()
也是一個簡化的形式
具體情況看代碼部分
# 計(jì)算前一天與后一天收盤價的變化率
df['收盤價(元)'].pct_change()
# 等價于df['收盤價(元)'].diff()/df['收盤價(元)']
8. 設(shè)置時間索引
設(shè)置索引,當(dāng)所設(shè)置的列表示的是時間,就代表該索引是時間索引,時間索引值在實(shí)際生活中非常常見,時間索引也有自己獨(dú)特的操作方式,按月取值,按周取值,取一年中的第幾天等這些在普通索引看來非常困難的事情,對于時間索引來說卻非常簡單
df.set_index('日期')
9. 使用時間索引,分別按年份,月份取值
- 只取2016年的數(shù)據(jù)
df['2016']
- 取2017年3月份的數(shù)據(jù)
df['2017-3']
另外還可以按照季度,周目,獲取某一年的第幾天,時間索引的操作我會單獨(dú)
10. 以5個數(shù)據(jù)作為數(shù)據(jù)滑動窗口 在這5個數(shù)據(jù)上取均值(收盤價)
滑動窗口,每次移動一個單位,窗口內(nèi)的數(shù)據(jù)始終是5個,
df['收盤價(元)'].rolling(5).mean() # 計(jì)算每次窗口內(nèi)的平均值
文章來源:http://www.zghlxwxcb.cn/news/detail-608954.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-608954.html
到了這里,關(guān)于數(shù)據(jù)分析 | Pandas 200道練習(xí)題,每日10道題,學(xué)完必成大神(7)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!