idxmin、idxmax 计算能够获取到最大值和最小值的索引值

3.2万
0
2023-09-14 00:54:10
正在缓冲...
2
投币
收藏
1
主要发布:数学思维与文化、少儿编程、发明创造、《新概念英语》背诵相关视频
3021.9万播放
简介
修改代码的日期
00:39
开盘价等都符合。但收盘价不同
00:29
因此功能很灵活但也更难使用
00:11
df.loc[冒号 , ['open','high']]
00:20
df.loc[冒号,['open','high']]
00:20
选择不连续的某几行或某几列
00:07
df.loc['2023-03-09' 冒号 '2023-04-25','open' 冒号 'close'] 增加可读性
00:16
运行结果,只有第一列到第三列数据
00:31
对代码进行修改处理
00:36
df.ix['2016-02-02' 冒号 '2016-02-04',冒号3] 拷贝到研究环境
00:11
df.ix['2016-02-02' 冒号 '2016-02-04',冒号3]
00:07
直接去数据和切片时,可以使用日期字符串
00:22
学过数据库的学员知道 时间戳记
00:22
df.ix[[pd.Timestamp('2016-02-02'), pd.Timestamp('2016-02-04')]]
00:14
pd.Timestamp('2016-02-04')
00:10
pd.Timestamp('2016-02-02')
00:20
df.loc['2016-02-02','2016-02-04',冒号]
00:08
当以标签名选取不连续的某几行的时候。可能出错
00:18
参数是列表,就是单独选择的数据
00:16
只有两行、两列数据
00:14
90、在研究环境中拷贝代码
00:10
['open','high'] 开盘、最高价
00:13
[0,2] 第一、第三行数据
00:12
ix 位置 和 标签都可以使用
00:12
df.ix[[0,2],['open','high']]
00:11
获取第一和第三列数据
00:36
位置索引方式切片
00:20
df.iloc[冒号,[0,2]]
00:12
拷贝代码,获取切片数据。单独的几个列
00:32
['open','high'] 列只取了两个
00:14
df.loc[冒号, 所有行都要
00:16
时间格式有问题
00:09
简便地获取行或列
00:08
直接用切片获取行
00:08
直接用标签名获取列
00:09
注意不要错乱
00:15
df['2016-02-02' 冒号 '2016-02-04']
00:09
df['2016-02-02' 冒号 '2016-02-04'] - 代码分析
00:29
df['2016-02-02' 冒号 '2016-02-04'] - 拷贝代码
00:26
行数据切片 - 示例代码
00:15
09、运行之后发现没有反馈结果出来
00:13
读取的数据和要切片的数据不符合
00:20
将股价读取时间 和 切片时间都做修改
00:46
修改代码之后获取行情数据和切片都成功了
00:17
df[0 冒号 3]
00:07
df[0 冒号 3] 代码分析
00:22
df[0 冒号 3] 拷贝代码
00:20
选取第1-4列数据
00:24
运行代码成功。获得选中的数据
00:36
18、df[['open','high']]
00:20
df[['open','high']] 代码分析
00:34
拷贝代码到研究环境成功
00:10
选取 open,high 两列数据
00:21
运行代码获取 开盘价、最高价数据
00:19
选取两列开盘和收盘数据
00:18
成功读取到 开盘和收盘价 数据
00:19
df['open']
00:11
df['open'] - 直接获取列的数据
00:09
df['open'] - 拷贝代码
00:12
选取 open 这一列的数据
00:16
获取 open 数据取得成功
00:13
修改代码获取 close 数据
00:12
获取收盘价数据成功
00:16
这一节为什么叫:简便的获取行或列?
00:16
直接使用 df[] 的模式选取数据
00:32
没有 .loc .iloc .ix 等操作
00:13
如何返回一个dataframe的单列或单行
00:11
如上此时返回的是一个series
00:16
而不是dataframe
00:08
有时单独只获取一行的时候也会返回一个series
00:11
df.ix[0,冒号]
00:12
df.ix[ 0, 冒号 ]
00:20
df.ix[0,冒号] - 代码分析
00:21
df.ix[0,冒号] - 拷贝代码
00:19
选取第一行的数据
00:20
成功运行代码,选取数据
00:12
选取第一行的数据。运行结果分析
00:24
type() 测试返回结果的类型
00:17
pandas.core.series.Series
00:14
单行、单列数据可能是序列数据而非数据框
00:17
len(x) 测试序列长度
00:13
长度为 4 ,就是 OHLC 数据
00:09
若要返回dataframe,可用中括号把索引括上
00:10
df[['open']]
00:09
df[['open']] 数据框结果
00:27
df[['open']] 拷贝到研究环境中
00:11
选取第一列的数据。返回数据框
00:18
选取第一列的数据。返回数据框-得到结果
00:11
总共有 161 行数据
00:16
df[['close']]
00:20
未收盘时得到的是当前价格
00:25
df.ix[[0],冒号]
00:16
df.ix[[0],冒号] 第一行,所有列都要取
00:25
df.ix[[0],冒号] 拷贝代码
00:09
选取第一行,所有列数据
00:20
运行代码,得到第一行数据
00:12
反复出现 加百力 这个字符串。如何消除
00:09
注释掉 print() 输出语句
00:23
按条件选取数据
00:06
df[逻辑条件]
00:08
极其重要的 df 功能
00:18
逻辑条件支持 (与)、(或)、(非)等逻辑运算
00:11
df[df['open'] 大于=8]
00:13
满足开盘价大于8的行取出来
00:20
df[df['open'] 大于 =8] - 拷贝代码
00:23
注释掉 print() 看不到字符串输出
00:12
筛选出 收盘价 大于 8 元的行
00:24
筛选出满足条件的行
00:36
多个条件之间运算时用括号括起来
00:09
df[(df.index=='2016-02-02') 或 (df['open'] 大于=8)]
00:15
df[(df.index=='2016-02-02') 或 (df['open'] 大于=8)] 代码分析
00:25
df[(df.index=='2016-02-02') 或 (df['open'] 大于=8)] 拷贝代码
00:16
运行代码成功。两个条件满足之一即可
00:41
df.index=='2023-02-02'
00:09
字符串形式的日期也可以直接比较
00:12
df['open'] 大于= 8
00:18
中间的竖线表示 或 的关系
00:12
df[(df.index=='2023-02-02') 与 (df['open'] 大于=8)]
00:29
两个条件同时满足用 与 运算符
00:23
(df.index=='2023-02-02') 与 (df['open'] 大于= 8)
00:17
得到 2023-2-2 的交易记录
00:15
选择df中不在[8.10,8]的数据
00:17
df[~df.isin([8.10,8])]
00:13
波浪线 可以 作为文件名的一部分
00:12
~df.isin([8.10,8])
00:18
df.isin() 是一定的范围
00:12
df[~df.isin([8.10,8])] 拷贝代码
00:18
选择 df 中不在[8,9]的数据 - 修改代码
00:26
结果似乎选择的是孤立数据不是范围
01:02
需要单独设计实验
00:13
df[~df.isin([8.67,8.77])] 选取了两个数据
00:28
那两个数据不能出现,直接变成 NA 数据
00:19
只删除对应数据,不影响行
00:17
这个方法有个常用情景,即按条件修改数据
00:13
把df中open大于8的替换为123
00:07
df[df['open'] 大于= 8]=123
00:12
df[df['open'] 大于= 8]=123 拷贝代码
00:11
直接运行
00:14
用 df 输出结果
00:22
选取数据部分介绍完成
00:10
选取数据的方式总结
00:26
切片或者按照行列选取数据
00:55
直接对数据框使用两种索引方式失败
00:43
需要加上 .loc .iloc .ix 等方式才行
00:16
系统性的复习一下这部分内容
00:21
get_price() 函数复习
00:47
展示 df 数据
00:23
获取行索引
00:15
获取列名称
00:14
只有最后这段输出。减少输出总量
00:31
获取数据框中的数据值
00:15
前三个都是基础属性信息
00:12
选择行标签为'2023-03-10',列标签为'open',的数据
00:13
选择第1行第1列的数据
00:09
选择第1行列为‘open’的数据
00:15
第一个参数用标签,第二个参数用位置索引
00:19
两个参数都是位置索引
00:07
两个参数都是标签
00:14
选择行从'2023-03-09'到'2023-04-25',列从'open'到'close'的数据
00:32
选择从第2行到最后一行,列从第1列到第3列的数据
00:18
选择行从'2023-03-09'到'2023-04-25',列从第1列到第3列的数据
00:18
标签索引,连头带尾都算数
00:08
位置索引,左闭右开,不算结尾
00:07
选择不连续的某几行或某几列
00:16
['open','high']
00:12
df.iloc[冒号,[0,2]]
00:18
df.ix[[0,2],['open','high']]
00:24
行数据切片
00:16
df['2023-03-09' 冒号 '2023-04-25']
00:12
选取第1-4列数据
00:08
df[0 冒号 3]
00:12
选取 open,close 两列数据
00:09
df[['open','close']]
00:11
选取 close 这一列的数据
00:08
df['close']
00:06
选取第一行的数据
00:06
x = df.ix[0,冒号]
00:15
type(x) 序列类型数据
00:07
len(x) 只有 4 个数据
00:06
选取第一列的数据。返回数据框
00:07
df[['close']]
00:08
选取第一行,所有列数据
00:07
df.ix[[0],冒号]
00:08
筛选出 收盘价 大于等于 8 元的行
00:07
df[ df['close']大于=8 ]
00:21
多个条件之间运算时用括号括起来
00:07
(df.index=='2023-02-02')
00:17
(df['open']大于=8)
00:09
两个条件同时满足用 与 运算符
00:06
(df.index=='2023-02-02') 与 (df['open']大于=8)
00:12
选择 df 中不在[8.67,8.77]的数据
00:08
df[~df.isin([8.67,8.77])]
00:09
~df.isin([8.67,8.77])
00:12
把 df 中open大于8的替换为123
00:12
df[df['open']大于=8]=123
00:21
同时对行和列做索引,不使用 名称 会出现错误
00:15
多个条件之间 运算时 用括号括起来
00:12
不把条件括起来,就会出错
00:42
括起来之后成功运行代码
00:12
'星' in '星st股票'
00:16
# 获取平台支持的所有股票, ETF基金信息
00:09
get_all_securities()
00:13
知道当前有多少只股票
00:15
get_all_securities(types='stock')
00:15
type(df)
00:12
pandas.core.frame.DataFrame
00:08
获取大量股票代码信息
00:20
5262 家上市公司
00:19
df 有 5 列信息
00:21
省略掉中部数据
00:18
点击左边部分缩小
00:30
display_name
00:19
name
00:15
start_date
00:12
end_date
00:21
type
00:08
display_name 中文名称
00:05
name 缩写代码
00:07
start_date 上市日期
00:05
end_date 退市日期
00:18
type 证券类型
00:06
types='stock'
00:11
默认就是获取股票信息
00:09
date 参数使用
00:24
2023年元旦时只有 4905 只股票
00:15
打开 API 文档
00:29
Ctrl + F 查找 get_all_securities
00:20
get_all_securities 获取所有标的信息
00:14
get_all_securities(types=[], date=None)
00:13
获取平台支持的所有股票、基金、指数、期货、期权信息
00:12
types: list: 用来过滤 securities 的类型
00:14
取消 高亮状态
00:12
list元素可选: 'stock', 'fund', 'index', 'futures', 'options'
00:14
'etf', 'lof', 'fja', 'fjb', 'open_fund', 'bond_fund', 'stock_fund'
00:16
后面会逐个介绍这些参数
00:13
types为空时返回所有股票
00:09
不包括基金,指数和期货
00:06
date:日期, 一个字符串或者 datetime.datetime datetime.date 对象
00:13
用于获取某日期还在上市的股票信息
00:09
17、截止当天为止所有证券信息
00:19
18、默认值为 None
00:09
19、表示获取所有日期的股票信息
00:11
以系统当前日期为标准的所有证券的信息
00:16
建议使用时添加上指定date
00:09
设置为2023年元旦时看到股票信息
00:47
准备测试 date 参数的含义
00:19
去掉 date 参数是 5262 只股票
00:17
date 设置为 2023-9-1 是 5051 只
00:30
date 设置日期 与 None 不同
00:24
默认获取股票数据
00:28
全部上市公司股票数据
00:12
types = 'stock'
00:23
date 的含义非常重要。当天还在上市的股票数据
00:44
参数设计非常合理
00:31
如果改在今天,没有开盘呢?
00:13
日期改在一个 非交易日,还是5051。仍然上市的股票列表
00:17
文档推荐设置日期是很有道理的
00:18
35、返回 [pandas.DataFrame]
00:15
get_all_securities()[冒号2]
00:18
显示返回的股票代码数据
00:21
display_name : 中文名称,只返回最新的
00:13
判断是否 st 请使用 get_extras()
00:08
股票名称可能会变化
00:36
判断是否st。已经有方法了
00:12
name:缩写简称,同上
00:08
start_date:上市日期
00:06
end_date:退市日期
00:06
股票是最后一个交易日,不同于摘牌日期
00:09
股票最后一个交易日
00:18
如果没有退市则为2200-01-01
00:08
type 是证券或期货的类型
00:16
types=[]
00:13
types=[] 列表参数。可以放置多个交易品种类型
00:11
类型数据,逐个介绍
00:13
stock(股票)
00:06
index(指数)
00:07
etf(场内ETF基金)
00:06
fja(场内分级A)
00:06
fjb(场内分级B)
00:07
fjm(场内分级母基金)
00:07
mmf(场内交易的货币基金)
00:07
lof(上市型开放基金)
00:07
open_fund(开放式基金)
00:06
bond_fund(债券基金)
00:06
stock_fund(股票型基金)
00:06
money_market_fund(场外交易的货币基金)
00:09
mixture_fund(混合型基金)
00:07
fund_fund(联接基金)
00:08
options(期权)
00:05
futures 期货品种
00:17
'QDII_fund'(QDII基金)
00:11
可以查询的证券品种非常多
00:16
能够获得证券、期货品种非常丰富的信息
00:22
def initialize(context)
00:16
获得所有股票列表
00:11
log.info(get_all_securities())
00:14
log.info(get_all_securities(['stock']))
00:17
将所有股票列表转换成数组
00:11
get_all_securities() 无参数版本
00:21
get_all_securities(['stock'])
00:17
stocks = list(get_all_securities(['stock']).index)
00:16
stocks = list(get_all_securities(['stock']).index) 详细注释
00:28
获得所有指数列表
00:07
get_all_securities(['index'])
00:10
get_all_securities(['index']) 指数说明
00:11
获得所有基金列表
00:07
df = get_all_securities(['fund'])
00:10
df = get_all_securities(['fund']) 运行代码
00:21
df = get_all_securities(['fund']) 数据分析
00:28
基金数据框的详细分析
00:35
获取所有期货列表
00:06
get_all_securities(['futures'])
00:09
所有期货品种的全部数据
00:19
获取所有期权列表
00:13
get_all_securities(['options'])
00:09
获得etf基金列表
00:10
df = get_all_securities(['etf'])
00:07
获得lof基金列表
00:08
df = get_all_securities(['lof'])
00:12
获得分级A基金列表
00:07
df = get_all_securities(['fja'])
00:08
获得分级B基金列表
00:06
df = get_all_securities(['fjb'])
00:07
获得2015年10月10日还在上市的所有股票列表
00:10
get_all_securities(date='2015-10-10')
00:09
获得2015年10月10日还在上市的 etf 和 lof 基金列表
00:09
get_all_securities(['etf', 'lof'], '2015-10-10')
00:14
df = get_all_securities('etf',date='2023-9-2')
00:41
df = get_all_securities('etf',date='2023-9-2') 还有 801 只正在交易
00:13
比较早的有 2014-2015 年上市的 ETF
00:27
大写 'ETF' 出错,必须是小写
00:07
运行出现错误和提示信息
00:27
get_all_securities('lof',date='2023-9-4')
00:46
df = get_all_securities('index',date='2023-9-5')
00:31
共有 536 种不同指数
00:23
上证综指也在其中
00:23
我们经常选择某个指数的成分股来做交易
00:24
get_all_securities(['fund'])
00:13
总共有 1782 只基金曾经在运行
00:23
所有曾经上市的基金信息都有
00:22
df = get_all_securities(['fund'],date='2023-9-5')
00:22
到 2023-9-5 在有 1338 只基金在运行
00:15
通过分析发现已经有 400 多只基金退出了市场
00:12
对于全部股票,那些是已经退市的,哪些是 ST 股
00:22
截止目前A股市场共有 5264 只股票
00:23
考虑从 display_name 方向出手解决
00:27
df1 = df[ df['display_name'].str.contains('ST') ]
00:28
df1 = df[ df['display_name'].str.contains('ST') ]
00:18
获取到所有股票显示名称中有 ST 字样的记录
00:21
ST、星ST 股票都有存在
00:33
S星ST托普 - 2007 年退市
00:21
171 只带有 ST 字样的股票
00:13
再次解读这段代码
00:31
已经退市的公司名称上有何特征?
00:12
未连接状态,看不到运行结果
00:32
刷新页面,重新连接服务器
00:45
找到一家 新都退 。已经退市的股票
00:24
退市股票名称中有 退 字样
00:17
将代码复制回去准备筛选退市股票
00:22
df['display_name'].str.contains(u'退')
00:19
df['display_name'].str.contains(u'退') Unicode 字符串
00:46
成功运行代码。找到名称中包含 退 字样的公司
00:24
总共发现 109 家已经退市的公司
00:15
能否查找包含其他有趣字符串的公司
00:22
df['display_name'].str.contains(u'中国')
00:27
df['display_name'].str.contains(u'中国') 有哪些包含 中国 字样
00:14
找到大量包含 中国 字样的上市公司
00:20
中国石油 ZGSY 2007-11-05
00:18
总共有 61 家包含 中国 字样的上市公司
00:10
可以建立一个股票资产的候选池
00:25
筛选名称中包含 上海 的股票
00:16
df['display_name'].str.contains(u'上海')
00:10
成功运行代码。与上海有关的上市公司也有不少
00:16
看到了股票列表,但没有看到总共有多少只
00:28
print(len(df4))
00:12
有 37 家上市公司的名称中包含 上海 字样
00:25
df['display_name'].str.contains(u'深圳')
00:16
有 6 家公司名称中包含 深圳 字样的公司
00:26
使用 print() 函数都会显示出来
00:25
len() 作用于数据框,得到长度信息
00:19
df['display_name'].str.contains(u'北京')
00:13
有 6 只股票,名称中有 北京 字样
00:13
选取数据
00:18
选取行名、列名、值
00:26
以标签(行、列的名字)为索引选择数据
00:26
股票数据常常以日期作为行的名字
00:16
x.loc[行标签,列标签]
00:10
以位置(第几行、第几列)为索引选择数据
00:09
x.iloc[行位置,列位置]
00:17
同时根据标签和位置选择数据
00:21
x.ix[行,列]
00:10
选择连续的多行多列——切片
00:08
选择连续的多行多列——切片 - 介绍说明
00:33
选择不连续的某几行或某几列
00:15
选择不连续的某几行或某几列 - 参数就是列表
00:23
简便地获取行或列
00:13
简便地获取行或列 - 操作方法
00:18
如何返回一个dataframe的单列或单行
00:07
如何返回一个 dataframe 的单列或单行
00:28
按条件选取数据
00:07
df[逻辑条件]
00:13
df[逻辑条件] - 举例说明
00:26
转置、排序
00:09
转置 df.T
00:10
按行名或列名排序——df.sort_index
00:09
按值排序——df.sort_index
00:07
打开 dataframe 转置、排序 相关网页
00:24
获得一个dataframe类型的数据样例
00:08
获得一个dataframe类型的数据样例,命名为df
00:08
get_price() 获取股票数据
00:12
获取的是数据框类型数据
00:11
start_date='2016-02-01',end_date='2016-02-04'
00:15
frequency='daily'
00:14
fields=['open','close']
00:11
df 输出数据
00:08
获取两个时间点的开盘价和收盘价数据
00:14
拷贝数据进入代码框
00:34
对函数参数进行回车换行处理
00:24
修改代码中读取日期参数
00:23
这段时间的行情数据全部都有
00:20
如何获得上证综指这段时间的数据
00:28
获得 上证指数 的指数代码
00:38
将股票代码修改为上证综指的指数代码
00:12
读取上证综指股票数据成功
00:21
把日期设置在当前日期,读取数据
00:27
frequency='weekly'
00:18
似乎出现了拼写错误
00:18
frequency只支持'Xd','Xm'
00:13
'daily'(等同于'1d'), 'minute'(等同于'1m')
00:12
X是一个正整数
00:07
frequency='5d'
00:17
每 5 天筛选一次
00:36
转置——df.T
00:07
转置——df.T 拷贝到研究环境中使用
00:14
df.T 转置数据成功
00:26
按行名或列名排序
00:10
df.sort_index
00:07
df.sort_index(axis=0,ascending=True)
00:13
axis= 0 为按行名排序;1 为按列名排序
00:11
ascending= True 为升序; False 为降序
00:08
按行名降序排序
00:09
df.sort_index(axis=0,ascending=False)
00:17
df.sort_index(axis=0,ascending=False) 拷贝到研究环境中
00:17
按照行索引进行了降序排列
00:21
按照列的索引做降序排列
00:37
df.sort_index(axis=1,ascending=True)
00:14
按照列名称做升序排列
00:20
按行名或列名排序 - 注意要点
00:23
按值排序
00:08
df.sort_index
00:09
df.sort_index(by=, ascending=True)
00:10
by 按哪一列的值排序
00:10
默认是按行标签排序
00:12
ascending= True 为升序
00:06
False 为降序
00:09
by=['close']
00:12
ascending=False 降序排列。大的在前,小的在后
00:09
df.sort_index(by=['close'], ascending=False)
00:29
df.sort_index(by=['close'], ascending=False) 运行效果分析
00:16
df.sort_index(ascending=False) 默认行标签排序
00:28
df.sort_index(ascending=False) 对行标签做排序
00:21
排序函数名相同,参数不同
00:26
dataframe 增删行或列
00:20
获得一个dataframe数据类型的样例
00:10
'000001.XSHE'
00:14
start_date='2016-02-01',end_date='2016-02-04'
00:12
frequency='daily'
00:11
fields=['open','high','low','close']
00:12
拷贝代码到研究环境中
00:51
运行代码得到股票数据
00:22
分析目前得到的行情数据
00:20
也可以继续增加列,属性。比如成交量
00:10
增加一列
00:07
df['new']=[1,2,3,4]
00:08
df['new']=[1,2,3,4] 代码分析
00:14
df['new']=[1,2,3,4] 拷贝代码
00:11
新增一列数据
00:16
增加一行
00:14
df.loc['new',冒号]=[1,1,1,1,1]
00:07
df.loc['new',冒号]=[1,1,1,1,1] 代码分析
00:24
df.loc['new',冒号]=[1,1,1,1,1] 拷贝代码到研究环境中
00:07
添加新行获得成功
00:22
删除行或列
00:14
用Ctrl + 滚轮放大网页
00:14
df.drop
00:11
df.drop(labels,axis=0,inplace=False)
00:12
labels 行或列的标签名
00:09
写在第一个可省略
00:11
axis= 0 删除行;1 删除列
00:09
inplace= False 生成新dataframe
00:09
True 不生成新的dataframe
00:15
替换原本dataframe
00:10
默认是False
00:08
该操作默认返回的是另一个新的dataframe
00:09
以至于原来的没有变
00:09
如在下面第一个例子中删除的列,在第二个例子中还有
00:13
要替换原来的请调整inplace参数
00:10
df.drop(['new','close'],axis=1)
00:07
['new','close']
00:09
axis=1
00:08
['new','close'],axis=1
00:12
df.drop(['new','close'],axis=1) 拷贝代码
00:17
分析前期使用的代码块
00:36
找到前期使用的代码框
00:24
重新拷贝未添加的代码
00:14
准备读取数据
00:13
拷贝读取数据的代码段
00:15
'000001.XSHE' 要读取的股票代码
00:08
start_date='2016-02-01',end_date='2016-02-04'
00:07
frequency='daily'
00:06
fields=['open','high','low','close']
00:14
成功读取到数据
00:24
增加一列的代码
00:14
df['new']=[1,2,3,4]
00:10
df['new']=[1,2,3,4] 生成新的一列
00:14
多出一个新列数据
00:11
['new']
00:11
df.loc['new', 冒号 ]=[1,1,1,1,1]
00:10
拷贝代码进入代码框
00:10
代码分析解释
00:22
观察到新增了一行数据
00:14
研究 df.drop(['new','close'],axis=1) 调用
00:11
['new','close'],axis=1 目标是删除两列
00:17
观察删除的效果
00:17
直接看效果似乎没有删除
00:21
删除时生成新的数据框,所以原来的没有变
00:17
生成了新数据框,看得到结果
00:12
返回新结果。原来的结果保持不变
00:16
df.drop(axis=0,labels=['new'],inplace=True)
00:08
axis=0
00:12
labels=['new']
00:16
inplace=True
00:11
df.drop(axis=0,labels=['new'],inplace=True) 拷贝代码
00:21
df 下 new 行已经不见了
00:22
保存好前面的代码
00:15
连接多个dataframe
00:19
横向连接
00:10
横向连接 - 多增加几行数据
00:12
纵向连接
00:10
按索引链接 - 相同索引连在一起
00:12
横向、纵向连接数据的方法不同
00:16
有相同行索引的数据连接在一起
00:15
dataframe 连接
00:18
concat 连接多个数据框
00:17
concat([df1,df2,...],axis=0)
00:18
[df1,df2,...]
00:11
axis=0
00:07
axis= 0 纵向;1 横向
00:22
使用前需导入过pandas模块
00:14
使用时要注意连接的dataframe行列对齐
00:11
可以同时拼接多个dataframe
00:18
拼接是强制的,允许连接后存在同名的行或列
00:12
获得一个dataframe类型的数据样例
00:11
get_price
00:11
'000001.XSHE'
00:20
start_date='2016-02-01',end_date='2016-02-03'
00:10
frequency='daily'
00:18
fields=['open','close']
00:19
df1 输出数据
00:10
进入研究环境
00:14
找到昨天最后处理的代码块
00:52
生成新的研究环境中的代码框
00:18
拷贝代码进入代码框,准备运行
00:12
运行代码获取股票数据
00:21
导入 pandas 模块
00:18
剪切掉代码框
00:28
横向连接
00:15
获得一个 dataframe 类型的数据样例
00:08
get_price() 获得股票数据
00:08
'000001.XSHE',start_date='2016-02-02',end_date='2016-02-04'
00:11
frequency='daily' 数据频率
00:09
fields=['high','low']
00:11
df2 显示数据框
00:10
拷贝代码进入研究环境中观察
00:12
运行代码输出 df2
00:13
pd.concat([df1,df2],axis=1)
00:13
连接数据框的代码分析
00:19
pd.concat() 调用函数连接数据框
00:15
[df1,df2]
00:07
axis=1 横向连接,增加列的数量
00:13
pd.concat([df1,df2],axis=1) 拷贝代码
00:10
运行代码,获取数据框,然后横向连接
00:18
纵向连接
00:19
获得一个 dataframe 类型的 数据样例
00:08
get_price() 获取第三个数据框
00:08
'000001.XSHE',start_date='2016-02-03',end_date='2016-02-04'
00:09
start_date='2016-02-03',end_date='2016-02-04' 数据日期不同
00:17
获取 frequency='daily' 日线数据
00:08
fields=['open','close'] 同 df1 结构类似的数据
00:11
df3 展示第 3 个数据框
00:09
df3 拷贝到研究环境中
00:14
数据没有完全对齐的就用 na 来补充
00:28
获取 df3 数据成功
00:14
pd.concat([df1,df3,df3],axis=0)
00:12
pd.concat() 直接调用方法
00:11
[df1,df3,df3]
00:09
[df1,df3,df3] df3 连接了2次
00:07
axis=0
00:09
axis=0 经常沿着纵向运行
00:20
pd.concat([df1,df3,df3],axis=0) 拷贝进入研究环境
00:12
纵向,行连接成功
00:18
按索引链接——join
00:07
df1.join([df2,df3,...])
00:08
join() 是数据框方法
00:16
[df2,df3,...] 其余参数是其他数据框
00:11
含义为按照df1的索引,将df1,df2,df3...链接起来
00:12
df1,df2,df3...皆为dataframe
00:08
df 的结构不完全相同
00:16
获取两个股票某一天的财务数据pe与市值
00:09
query() 函数获取对象 q
00:11
valuation.pe_ratio
00:08
valuation.market_cap
00:08
valuation.code
00:05
filter() 过滤器
00:07
valuation.code.in_() 股票代码
00:08
valuation.code.in_(['000001.XSHE','000002.XSHE']) 限制股票代码
00:18
get_fundamentals() 获取财务数据
00:11
调整股票代码为index
00:14
df1.index=df1['code']
00:06
df1.index 行索引
00:10
df1['code'] 是股票代码
00:06
del df1['code']
00:06
df1 显示删除后的股票代码及PE、市值数据
00:05
拷贝财务数据获取代码进入 代码框
00:15
成功输出股票财务数据
00:15
行索引是数字而不是股票代码
00:14
修改行索引
00:20
修改完成后,删除这一列的内容
00:10
del df1['code'] 可以删除数据框中的某一列
00:07
最后 把清理干净的 df1 输出 出来
00:06
设置和清理代码拷贝到研究环境中
00:16
行索引变成股票代码,已经处理好了
00:19
获取股票基本信息,中文名称等
00:12
了解股票的中文名称
00:14
get_all_securities() 获取股票名称
00:07
types=['stock']
00:09
date='2017-10-15'
00:12
显示前5个
00:05
有几千只股票上市,只看前几个
00:17
df2.head(5)
00:06
df2.head(5) R 语言中也存在
00:14
拷贝代码进入 研究环境
00:08
查询到前 5 条股票数据
00:12
df2.head(10) 前 10 支股票记录
00:12
df2.tail(5) 末尾的5条记录也存在
00:28
head(),tail() R 语言也有
00:15
按照df1的index,将df1与df2两个dataframe链接起来
00:12
df1.join([df2])
00:06
df1.join() 对象的方法
00:15
df1.join([df2]) 数据框名称列表
00:11
df1.join([df2]) 拷贝到研究环境中
00:11
通过索引连接df成功
00:23
类似于数据表的连接
00:13
使用 股票代码 连接两个不同规模的数据表
00:26
获取两个表中我们都感兴趣的数据
00:15
获取都感兴趣的关键信息
00:25
组合生产新的更大的数据表
00:14
连接多个dataframe
00:18
横向连接 - 多增加一些列
00:15
纵向连接 - 多增加一些行
00:12
pd.concat() 都是使用 pd 内部的函数实现
00:16
按索引连接 - 以索引为基础,抽取数据
00:16
df1.join([df2,df3,...]) 数据框的方法
00:17
含义为按照df1的索引,将df1,df2,df3...链接起来。谁调用,就参考谁的索引
00:12
按索引链接——join - 数据库中很常见
00:10
回到 pandas.dataframe 专题使用指南 目录下
00:16
组建dataframe
00:08
组建 dataframe -创建数据
00:10
组建方法
00:09
pd.DataFrame
00:07
用字典型数据组建
00:15
pd.DataFrame() 字典数据转换成 dataframe 数据
00:05
简便地获得聚宽数据中的时间索引
00:07
不是已经有很多 df 数据,为什么要生成自己的df数据
00:19
有需要生成自己的df数据
00:28
打开新的 组建 dataframe 页面
00:20
首先导入pandas模块
00:04
import pandas as pd
00:05
组建方法——pd.DataFrame
00:08
pd.DataFrame(data=None, index=None, columns=None)
00:07
pd.DataFrame(data=None, index=None, columns=None) 函数说明
00:35
data= 数据 列表或字典数据
00:07
index= 索引,即行名、行表头
00:07
columns= 列名、列表头
00:05
建立一个简单的dataframe
00:09
一个三行两列的数据
00:08
列表中包含 3 个小的列表
00:12
列名
00:07
v=['a','b']
00:08
#行名
00:05
h=['c','d','e']
00:06
v=['a','b'] 第 3 个参数
00:07
h=['c','d','e'] 行索引
00:08
拷贝代码准备运行
00:11
生成新的代码框
00:09
有列表、列名、行名称的变量赋值
00:16
将数据d,列名v,行名h组合成一个dataframe
00:19
df = pd.DataFrame(data=d,index=h,columns=v)
00:06
df 生成数据框之后展示
00:04
df = pd.DataFrame(data=d,index=h,columns=v) 拷贝到研究环境中
00:10
生成了我们需要的数据框结构
00:14
type(df) 检查类型
00:14
pandas.core.frame.DataFrame 类型
00:10
df 结构分析
00:23
用字典型数据组建
00:13
pd.DataFrame 字典数据创建
00:06
建立一个简单的字典型数据
00:06
dic={'a' 冒号 [1,3,5],'b'冒号[2,4,6]}
00:07
dic={'a' 冒号 [1,3,5],'b'冒号[2,4,6]} 代码分析
00:17
dic 输出字典数据
00:06
dic={'a' 冒号 [1,3,5],'b'冒号[2,4,6]} 代码分析 拷贝代码
00:06
生成、显示 dic 数据成功
00:23
用字典生成数据框结构
00:10
df = pd.DataFrame(data=dic,index=['c','d','e'])
00:06
data=dic,index=['c','d','e'] 参数分析
00:21
df 显示数据框
00:06
df = pd.DataFrame(data=dic,index=['c','d','e']) 拷贝代码
00:11
生成数据框成功
00:17
df = pd.DataFrame(data=dic,index=['c','d','e']) 分析获得的数据框的结构
00:15
pd.DataFrame 通过列表和字典生成 数据框
00:13
简便地获得聚宽数据中的时间索引
00:10
有时建立一个dataframe时,为了和平台数据保持一致,需要使用相同的时间行索引
00:11
但时间数据操作复杂
00:06
而且涉及到节假日、非交易日等问题,直接建立比较困难
00:08
快速获得跟平台数据一致的时间索引
00:08
这里说的索引是行的 index
00:06
原理就是直接把平台数据的时间索引拿出来
00:06
get_price() 获得股票数据
00:07
'000001.XSHE',start_date='2016-02-01',end_date='2016-02-03' 参数如此
00:10
frequency='daily' 日线数据
00:07
无 fields 参数
00:13
.index
00:08
.index 直接得到时间戳记录
00:12
h 展示得到的行情数据
00:06
DatetimeIndex
00:15
拷贝代码到研究环境中
00:10
['2016-02-01', '2016-02-02', '2016-02-03'], dtype='datetime64[ns]'
00:20
用获得的时间索引,组建dataframe
00:11
df = pd.DataFrame(data=dic,index=h)
00:07
data=dic 前期生成的字典
00:15
index=h 时间戳 做索引
00:11
df 输出数据框
00:09
df = pd.DataFrame(data=dic,index=h) 拷贝代码
00:11
行索引发生了改变
00:24
使用聚宽数据中的行索引来修改数据
00:08
组建方法——pd.DataFrame 总结
00:14
使用 列表 生成数据框,没有问题
00:09
index=h,columns=v 提供行索引 和 列名称
00:08
用字典型数据组建。第二种模式
00:06
'a' 冒号 [1,3,5],'b' 冒号 [2,4,6]
00:14
pd.DataFrame(data=dic,index=['c','d','e']) 用字典数据生成
00:16
如何简便地获得聚宽数据中的时间索引?
00:08
主动取出索引用于 df 数据
00:16
df = pd.DataFrame(data=dic,index=h) 数据 和 响应的时间戳都有了
00:14
缺失值处理
00:13
缺失值处理 包含三大部分内容
00:13
去掉缺失值
00:09
df.dropna()
00:06
对缺失值进行填充
00:05
df.fillna()
00:05
判断数据是否为缺失
00:07
df.isnull()
00:05
都是 df 对象的方法
00:10
从删除 na 数据开始处理
00:15
打开新页面,解决 缺失值 处理问题
00:13
首先导入pandas模块,涉及到dataframe的不妨都执行这行代码
00:08
import pandas as pd
00:07
获得一个dataframe数据类型的样例
00:07
get_price() 直接读取股票数据
00:09
'000001.XSHE',start_date='2016-02-01',end_date='2016-02-04'
00:16
fields=['open','high','low','close']
00:09
df[df 大于 8]=nan
00:13
df[df 大于 8]=nan,强制修改了部分数据
00:16
df 显示修改后的结果
00:06
拷贝代码准备测试
00:09
生成代码框并拷贝数据
00:15
成功得到数据
00:20
没有数据大于 8 赋值失败
00:24
为什么案例中有,现在运行又没有了呢?
00:14
代码 和 股票时间都没有错
00:18
为什么相同股票、相同时间,收盘价不同
00:27
聚宽后台数据库,应该也没问题
00:10
应该是除权除息的原因,导致价格不同
00:22
门槛改成 7.4 可能也不行
00:24
df 大于 7.35
00:11
修改代码成功
00:14
成功获得包含 na 数据的 数据框,然后处理
00:20
去掉缺失值——df.dropna
00:10
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
00:08
axis= 0 按行检查缺失
00:11
1 按列检查缺失
00:07
不写默认为 0
00:06
axis= 0 按行检查。满足一般条件
00:09
how= 'any' 有一个缺失值就算缺失
00:13
'all' 行或列(根据axis参数)全缺失才算缺失
00:10
不写默认为'any'
00:05
thresh= x,x为一个整数
00:08
含义为行或列(根据axis参数)中非缺失数值个数大于等于x则不算缺失
00:13
缺失值的阈值。大于才算,反之不算
00:18
即小于x则算缺失,会被去除
00:12
subset= 标签名
00:12
选择要对哪个列或行(与axis中的相反)进行检查缺失
00:11
要对哪个列或行(与axis中的相反)进行检查缺失
00:15
没写的则不检查
00:06
即限制检查范围
00:07
相对复杂,请看例子和与例子注释
00:06
参数全不设置则取默认值,即axis=0, how='any', thresh=None, subset=None, inplace=False
00:08
即去掉缺失值所在的行
00:06
df.dropna()
00:07
拷贝 代码 到 研究环境中
00:09
运行结果正常显示
00:12
有缺失值的行都会被删除
00:14
删除包含缺失值的行或者列
00:25
按列检查是否缺失,去掉缺失值所在的列
00:07
df.dropna(axis=1)
00:05
axis=1 按照列为单位处理
00:07
df.dropna(axis=1) 拷贝代码成功
00:18
df.dropna(axis=1) 成功保存两列数据
00:10
按列检查是否缺失,若列中全部缺失才去除
00:23
所以例子中没有去除
00:06
df.dropna(axis=1,how='all')
00:11
how='all' 所有数据都是 na 才会删除
00:09
df.dropna(axis=1,how='all') 拷贝到研究环境中
00:10
运行代码,正常,没有人任何问题
00:18
没有任何一列满足条件
00:14
按列检查是否缺失,只保留非缺失值大于等于2个的
00:20
na 值的数量足够大才需要去除这一行
00:11
df.dropna(axis=1,thresh=2)
00:05
axis=1 列为单位分析
00:05
thresh=2 阈值是 2
00:11
df.dropna(axis=1,thresh=2) 拷贝研究环境
00:12
df.dropna(axis=1,thresh=2) 代码正常运行
00:14
high 列消失,na 值过多,超过阈值
00:24
按行检查是否缺失
00:13
只检查high列和close列
00:16
去掉这两列中含有缺失值的行
00:08
df.dropna(axis=0,subset=['low','close'])
00:09
df.dropna(axis=0,subset=['high','close'])
00:09
df.dropna(axis=0,subset=['high','close']) 正确的代码
00:12
df.dropna(axis=0,subset=['high','close']) 代码分析
00:22
df.dropna(axis=0,subset=['high','close']) 只有一行保留
00:19
去掉缺失值——df.dropna 对应的行或者列被去除
00:25
df.dropna() 有5个参数
00:13
axis= 0 按行检查缺失;1 按列检查缺失。不写默认为0
00:08
按行检查缺失;1 按列检查缺失。不写默认为0
00:12
how= 'any' 有一个缺失值就算缺失;'all' 行或列(根据axis参数)全缺失才算缺失
00:11
'any' 有一个缺失值就算缺失;'all' 行或列(根据axis参数)全缺失才算缺失
00:11
thresh= x,x为一个整数
00:18
thresh= x,x为一个整数。阈值处理
00:17
subset= 标签名。选择要对哪个列或行(与axis中的相反)进行检查缺失
00:11
subset = 标签名。选择要对哪个列或行( 与axis中的相反) 进行检查缺失
00:25
inplace=False 是否要修改原始数据框
00:13
df.dropna() 参数多比较复杂
00:18
inplace=False 默认不修改原始数据框。而生产新的
00:16
df.dropna() 如何处理包含 na 的数据
00:13
na 数据一直存在非常特殊
00:13
产生 na 数据的原因很多
00:20
na 数据无法参加一般的算数运算
00:13
na 数据的常见处理方法就是删除或者填充
00:10
df.dropna() 直接删除避免出现严重错误
00:19
对缺失值进行填充
00:14
df.fillna()
00:07
df.fillna(value=None,axis=None)
00:09
value= 替换缺失值的值
00:11
可以是单个值、字典、dataframe等
00:10
但不能是list。区别请看例子
00:09
把缺失值替换成233
00:08
df.fillna(value=233)
00:07
df.fillna(value=233) 拷贝代码
00:19
填充数据的代码运行成功
00:11
na 数据被替换成了 233
00:14
用字典时:仅替换open列中的缺失值
00:21
df.fillna(value={'open'冒号233})
00:12
value={'open' 冒号 233} 指定要替换的列
00:28
df.fillna(value={'open' 冒号 233}) 拷贝代码
00:15
df.fillna(value={'open' 冒号 233}) 拷贝代码 运行成功
00:13
df.fillna(value={'open' 冒号 233}) 拷贝代码 只有 open 这列数据发生了改变
00:13
只针对某一列数据做 na 值替换
00:13
获得一个行列跟df一致dataframe,gf
00:09
gf=get_price() 获得数据
00:08
'000001.XSHE',start_date='2016-02-01',end_date='2016-02-04'
00:16
fields=['open','high','low','close']
00:09
gf 输出 gf 数据
00:08
gf=get_price('000001.XSHE',start_date='2016-02-01',end_date='2016-02-04' 拷贝代码
00:11
成功获得股票数据
00:14
用dataframe时:替换df中的缺失值
00:17
如果缺失则替换为gf中对应位置的值
00:09
df.fillna(value=gf)
00:06
df.fillna(value=gf) 代码分析
00:17
df.fillna(value=gf) 拷贝到研究环境中
00:12
填充后的结果直接返回
00:41
填充后的结果是新的数据框
00:25
填充结果是完整的数据框
00:13
单个值、字典、dataframe
00:18
可以是单个值
00:12
字典 指定列数据被替换
00:09
dataframe,对应位置的数据被替换
00:06
判断数据是否为缺失
00:09
df.isnull() 判断是否缺失
00:07
比较简单直接看例子
00:09
df.isnull()
00:05
df.isnull() 无参数,直接使用
00:12
df.isnull() 拷贝代码
00:20
df.isnull() 成功运行
00:23
df.isnull() 得到的还是数据框。对应 na 的地方是 true
00:13
a = df.isnull()
00:16
type(a) 获取 a 的类型
00:19
pandas.core.frame.DataFrame
00:10
由 bool 值组成的数据框
00:17
为什么要这样用这个方法判断是否为缺失?
00:08
因为nan不等于nan(如下例)
00:11
即用类似x == nan条件为真 这样的判断方法
00:20
无法判断一个值x是否为nan
00:06
nan==nan
00:10
nan==nan 拷贝代码
00:09
得到的结果是 False
00:15
nan==nan 无法判断
00:16
nan + 100 得到 nan
00:27
nan 星号 100,还是nan
00:12
nan 星号 nan,还是nan
00:14
这就是为什么 nan 数据要专门处理的原因
00:15
缺失值处理章节总结
00:24
isnull(nan) 不存在这个函数
00:26
isna(nan) 这个函数也不存在
00:18
dataframe 缺失值处理,三大部分介绍完成
00:16
常用统计函数
00:23
打开页面发现大量相关的内容
00:19
获得一个dataframe数据类型的样例
00:12
df=get_price() 直接获取股票数据的 df
00:08
'000001.XSHE',start_date='2016-02-01',end_date='2016-02-04'
00:09
frequency='daily' 股票日线级别的数据
00:07
fields=['open','high','low','close'] OHLC数据
00:08
df 数据输出出来观察
00:06
处理旧程序的错误。注释掉错误代码
00:15
添加新的代码框,然后拷贝代码进入其中
00:14
2016年2月1日-4日的股票数据
00:14
df.describe()
00:11
describe 针对Series或个DataFrame列计算汇总统计
00:09
针对Series或个DataFrame列计算汇总统计
00:15
df.describe() 没有任何参数直接统计
00:07
df.describe() 拷贝代码
00:16
df.describe() 快速获得统计结果
00:11
df.describe() 按列为标准做统计
00:17
df.describe() 统计结果分析
00:19
针对每列数据有 8 个统计结果
00:10
df.count()
00:05
count 非na值的数量
00:06
df.count() 直接使用
00:07
df.count() 无参数直接使用
00:09
df.count() 拷贝代码
00:14
df.count() 运行结果正确
00:10
df.count() 按列单独做统计
00:17
df.count() 正常数据的个数
00:11
df.min() df.max()
00:11
min、max 计算最小值和最大值
00:07
df.min() 计算最小值
00:05
df.max() 计算最大值返回结果
00:09
df.min() 拷贝代码
00:11
df.min() 结果正常。按列统计每一列的最小值
00:15
df.max() 的结果是多少
00:17
df.idxmin() df.idxmax()
00:08
idxmin、idxmax 计算能够获取到最大值和最小值的索引值
00:12
df.idxmin() 最小值索引
00:05
df.idxmax() 最大值索引
00:07
df.idxmin() 拷贝代码
00:13
df.idxmin() 取得最小值的 时间索引
00:19
df.idxmax() 最大值的位置
00:14
df.idxmax() 每一列取得最大值的行索引
00:17
df.quantile()
00:05
quantile 计算样本的分位数(0到1)
00:08
df.quantile() 基础代码
00:06
df.quantile() 拷贝代码
00:07
df.quantile() 按列取得数据
00:12
df.quantile(0.5) 正常运行
00:18
df.quantile(0.5) 打开帮助信息
00:41
df.quantile(0.5) 打开关闭帮助信息
00:15
注释掉帮助信息获取代码
00:12
df.sum()
00:11
sum 值的总和
00:06
df.sum() 按列取所有数据总和
00:08
df.sum() 拷贝代码
00:09
df.sum() 按列求和,得到结果
00:14
df.sum() 每一列的结果整体求和
00:22
df.mean()
00:05
mean 值的平均数
00:07
df.mean() 求每一列的平均数
00:06
df.mean() 取平均数
00:09
df.mean() 得到每一列的平均数
00:16
df.median()
00:10
median 值的算术中位数(50%分位数)
00:08
df.median() 代码
00:11
df.median() 拷贝代码
00:08
df.median() 百分之五十 分位数
00:11
mad 根据平均值计算平均绝对离差
00:07
df.mad() 使用默认参数
00:08
df.mad() 拷贝代码
00:11
df.mad() 每一列单独计算绝对离差
00:14
df.mad() 计算绝对离差
00:16
df.var()
00:06
客服
顶部
赛事库 课堂 2021拜年纪