1. 删除所有存在缺失值的行
语法:
df.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
参数:
axis : {0 or ‘index’, 1 or ‘columns’}, default 0
0, or ‘index’:删除包含丢失值的行 1, or ‘columns’:删除包含丢失值的列
默认为0
how : {‘any’, ‘all’}, default ‘any’
‘any’: 如果存在NA值,则删除该行或列
‘all’: 如果所有值都是NA,则删除该行或列
thresh: int,保留含有int个非空值的行
subset: 对特定的列进行缺失值删除处理
不同情况参数设置:
删除所有有缺失值的行
df.dropna()
删除所有有缺失值的列
df.dropna(axis=‘columns’)
df.dropna(axis=1)
删除所有值缺失的行
df.dropna(how=‘all’)
删除至少有两个非缺失值的行
df.dropna(thresh=2)
指定判断缺失值的列范围
df.dropna(subset=[‘name’, ‘born’])
使删除和的结果生效
df.dropna(inplace=True)
指定列的缺失值删除
df.toy.dropna()
2. 重置data的行号
data = data.reset_index()
3.设置日期为索引
data = data.set_index('日期')
4. 以5个数据作为一个数据滑动窗口,在这5个数据上取均值(收盘价)
data['收盘价(元)'].rolling(5).mean()
日期
2016-01-04 NaN
2016-01-05 NaN
2016-01-06 NaN
2016-01-07 NaN
2016-01-08 15.69578
2016-01-11 15.56330
2016-01-12 15.47322
2016-01-13 15.34780
2016-01-14 15.42022
2016-01-15 15.43612
2016-01-18 15.54740
2016-01-19 15.60392
2016-01-20 15.57920
2016-01-21 15.34250
2016-01-22 15.24358
2016-01-25 15.12878
2016-01-26 14.93272
2016-01-27 14.83204
2016-01-28 14.83204
2016-01-29 14.81086
2016-02-01 14.71724
2016-02-02 14.73490
2016-02-03 14.72252
2016-02-04 14.84970
2016-02-05 15.11112
2016-02-15 15.45556
2016-03-11 15.49266
2016-03-14 15.53682
2016-03-15 15.48736
2016-03-16 15.42552
...
2017-03-24 15.95200
2017-03-27 15.93200
2017-03-28 15.93400
2017-03-29 15.95200
2017-03-30 15.93800
2017-03-31 15.94800
2017-04-05 15.97200
2017-04-06 15.99000
2017-04-07 16.03600
2017-04-10 16.06800
2017-04-11 16.04400
2017-04-12 15.99000
2017-04-13 15.92000
2017-04-14 15.80200
2017-04-17 15.72000
2017-04-18 15.60200
2017-04-19 15.44600
2017-04-20 15.27800
2017-04-21 15.18600
2017-04-24 15.07400
2017-04-25 15.02400
2017-04-26 15.01200
2017-04-27 15.07200
2017-04-28 15.10400
2017-05-02 15.13600
2017-05-03 15.14200
2017-05-04 15.12800
2017-05-05 15.07000
2017-05-08 15.00000
2017-05-09 14.92000
Name: 收盘价(元), Length: 309, dtype: float64
将数据往后移动5天
data.shift(5)
index |
代码 | 简称 | 前收盘价(元) | 开盘价(元) | 最高价(元) | 最低价(元) | 收盘价(元) | 成交量(股) | 成交金额(元) | 涨跌(元) | 涨跌幅(%) | 均价(元) | 换手率(%) | A股流通市值(元) | 总市值(元) | A股流通股本(股) | 市盈率 |
日期 | ||||||||||||||||||
2016-01-04 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2016-01-05 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2016-01-06 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2016-01-07 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2016-01-08 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
309 rows × 18 columns
作业
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib import seaborn as sns data = pd.read_excel('/home/mw/input/pandas1206855/600000.SH.xls') # 删除空值 data.dropna(axis=0, how='any', inplace=True) # 删除非数值行 tmp = [] for i in range(len(data)): if type(data.loc[i, '换手率(%)']) != float: tmp.append(i) data.drop(labels=tmp, inplace=True) # 重置索引,并设置新index data = data.reset_index() data = data.set_index('日期') # STEP1: 按照以下要求计算结果 # 1. 将数据往前移动5天 !注意此处!第25步往后移动5天! # data = data.shift(-5) # 第25步操作 # data = data.shift(-5) # 第一题操作 # 2. 使用expanding函数计算开盘价的移动窗口均值 meta_mean_sta = data['开盘价(元)'] exp_mean_sta = data['开盘价(元)'].expanding(min_periods=1, center=False, axis=0).mean() plot_df1_mean = pd.concat([meta_mean_sta, exp_mean_sta], axis=1, ignore_index=True) plot_df1_mean = plot_df1_mean.rename(columns={0: '原始数据', 1: '移动窗口均值'}) # 3. 绘制上一题的移动均值与原始数据折线图 # plt.rc('figure', figsize=(16, 6), dpi=150) # plt.plot(plot_df1_mean['原始数据']) # plt.plot(plot_df1_mean['移动窗口均值']) # plt.show() # 4. 计算布林指标 N = 20 # 布林线指标的参数最好设为20 # 第一步:计算MA 移动平均线 ma = data['收盘价(元)'].rolling(N).mean() # 第二步:计算标准差MD md = data['收盘价(元)'].rolling(N).std() # 第三步:计算MB、UP、DN线 分别对应 中轨线 上轨线 下轨线 mb = ma up = mb + (md * 2) dn = mb - (md * 2) # 5. 计算布林线并绘制 plt.rc('figure', figsize=(16, 6), dpi=150) plt.plot(ma, color='blue') plt.plot(up, color='red') plt.plot(dn, color='g') #plt.show() # STEP2: 为了简化最终提交的行数,所以这里只需要保留上轨线UP这一字段即可,并保存为 csv 文件 dic = {'上轨线': up} df = pd.DataFrame(dic).reset_index(drop=True) df = df.round(2) df.columns = ['answer'] df.dropna(axis=0, how='any', inplace=True) df['id'] = range(len(df)) df = df[['id', 'answer']] df.to_csv('answer_4.csv', index=False, encoding='utf-8-sig')