如果你对DataFrame(df)数据类型还不是很熟悉,建议先阅读另一篇基础博文:
Pandas—结构化数据(DataFrame)来源 & 转成字典(dict)
如下内容如提到df,都代表的是DataFrame的结构化数据
1.单独获取df里面的三个部分index/colume/values
在推荐的博文里面,我们已经介绍了,如何把df数据转化为一个包含三个key的大字典。
https://blog.csdn.net/chenmozhe22/article/details/108095974
那么如果只是想获取某一部分,如何获取呢?
from pandas.core.frame import DataFrame as df
data_all = {"trade_date": ['20200818', '20200818', '20200818', '20200818', '20200818', '20200818'],
"ts_code": ['600030.SH', '600118.SH', '600276.SH', '600519.SH', '600887.SH', '601012.SH'],
"name": ['中信证券', '中国卫星', '恒瑞医药', '贵州茅台', '伊利股份', '隆基股份']}
index = ['a', 'b', 'c', 'd', 'e', 'f']
date_frame = df(data_all, index=index)
print(date_frame.index.tolist())# 只获取df的索引列表
print(date_frame.columns.tolist())# 只获取df的列名列表
print(date_frame.values.tolist())# 只获取df的所有值的列表(二维列表)
['a', 'b', 'c', 'd', 'e', 'f']
['trade_date', 'ts_code', 'name']
[['20200818', '600030.SH', '中信证券'], ['20200818', '600118.SH', '中国卫星'], ['20200818', '600276.SH', '恒瑞医药'], ['20200818', '600519.SH', '贵州茅台'], ['20200818', '600887.SH', '伊利股份'], ['20200818', '601012.SH', '隆基股份']]
2.获取df的行数/列数 & 前几行 & 后几行
from pandas.core.frame import DataFrame as df
data_all = {"trade_date": ['20200818', '20200818', '20200818', '20200818', '20200818', '20200818'],
"ts_code": ['600030.SH', '600118.SH', '600276.SH', '600519.SH', '600887.SH', '601012.SH'],
"name": ['中信证券', '中国卫星', '恒瑞医药', '贵州茅台', '伊利股份', '隆基股份']}
index = ['a', 'b', 'c', 'd', 'e', 'f']
date_frame = df(data_all, index=index)
print(date_frame)# 打印完整显示的效果
print(date_frame.shape)# 获取df的行数、列数元祖
print(date_frame.head(2))# 前2行
print(date_frame.tail(2))# 后2行
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
c 20200818 600276.SH 恒瑞医药
d 20200818 600519.SH 贵州茅台
e 20200818 600887.SH 伊利股份
f 20200818 601012.SH 隆基股份
(6, 3)
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
trade_date ts_code name
e 20200818 600887.SH 伊利股份
f 20200818 601012.SH 隆基股份
3.获取列信息
1.键值索引方式
# date_frame获取部分省略,与上文一致
print(date_frame["name"])# 只获取某列的值,使用一维数组
print("="*100)
print(date_frame[["name", "ts_code"]])# 获取多列的值,必须使用二维数组
a 中信证券
b 中国卫星
c 恒瑞医药
d 贵州茅台
e 伊利股份
f 隆基股份
Name: name, dtype: object
=========================================================================
name ts_code
a 中信证券 600030.SH
b 中国卫星 600118.SH
c 恒瑞医药 600276.SH
d 贵州茅台 600519.SH
e 伊利股份 600887.SH
f 隆基股份 601012.SH
2.切片方式
# date_frame获取部分省略,与上文一致
print(date_frame[date_frame.columns[:2]])
print("="*100)
print(date_frame[date_frame.columns[-2:]])
trade_date ts_code
a 20200818 600030.SH
b 20200818 600118.SH
c 20200818 600276.SH
d 20200818 600519.SH
e 20200818 600887.SH
f 20200818 601012.SH
============================================================================
ts_code name
a 600030.SH 中信证券
b 600118.SH 中国卫星
c 600276.SH 恒瑞医药
d 600519.SH 贵州茅台
e 600887.SH 伊利股份
f 601012.SH 隆基股份
4.获取行信息
1.键值索引方式
print(date_frame["a":"c"])# 行索引a---->c ,包含b索引行号
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
c 20200818 600276.SH 恒瑞医药
2.切片方式
print(date_frame[:2])# 获取前2行数据
print("=" * 100)
print(date_frame[-2:])# 获取后2行数据
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
=============================================================================
trade_date ts_code name
e 20200818 600887.SH 伊利股份
f 20200818 601012.SH 隆基股份
5.loc函数(行键值、列键值)
loc函数,也是获取行信息、列信息的功能。但它又不止于此,还可以指定某个某列去获取,这个才是它的核心功能。
loc(行信息,列信息)
行信息的方式:
line_key_1:line_key_2
line_key_1
列信息的方式:
col_key_1:col_key_2
col_key_1
loc函数对应的区间,都是前闭后闭(区间开始和结束,都包含的),看看后面的案例慢慢体会
1.获取行信息
df_new = date_frame.loc["a":"c"] # 行索引a---->c ,包含b索引行号
# df_new = date_frame.loc["a"] # 只获取a行的信息
print(df_new)
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
c 20200818 600276.SH 恒瑞医药
2.获取列信息
df_new = date_frame.loc[:, "trade_date":"name"]# 获取trade_date----->name列的信息,包含ts_code列信息,这个有点类似如上的a----->c ,但是包含了b
# df_new = date_frame.loc[:, "trade_date"] # 只获取trade_date列的信息,包含所有行
print(df_new)
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
c 20200818 600276.SH 恒瑞医药
d 20200818 600519.SH 贵州茅台
e 20200818 600887.SH 伊利股份
f 20200818 601012.SH 隆基股份
注意点:
只取列的时候,需要把行的索引表达出来,用空索引(:)即可,然后逗号后面添加列索引的信息
3.指定某行&某列的值
有点类似excel表格的xx行xxx列的值
df_new = date_frame.loc["a":"c", "trade_date":"ts_code"]# a--->c行索引,且trade_date--->ts_code列的数据
print(df_new)
trade_date ts_code
a 20200818 600030.SH
b 20200818 600118.SH
c 20200818 600276.SH
6.iloc函数(行切片、列切片)
iloc函数,也是获取行信息、列信息的功能。但它也有自己的特色,主要是通过切片的形式获取行信息和列信息。
iloc(行信息,列信息)
行信息的方式:
line_index_1:line_index_2
line_index_1
[line_index_1, line_index_3]
列信息的方式:
col_index_1:col_index_2
col_index_1
[col_index_1, col_index_2]
iloc函数对应的区间,都是前闭后开(区间开始包含,后面不包含的),看看后面的案例慢慢体会
1.获取行信息
df_new = date_frame.iloc[0:2]# 支持切片的步幅,例如[0:6:2],开始到结束,间隔取值
print(df_new)
trade_date ts_code name
a 20200818 600030.SH 中信证券
b 20200818 600118.SH 中国卫星
2.获取列信息
df_new = date_frame.iloc[:, 0:2]
print(df_new)
trade_date ts_code
a 20200818 600030.SH
b 20200818 600118.SH
c 20200818 600276.SH
d 20200818 600519.SH
e 20200818 600887.SH
f 20200818 601012.SH
3.获取指定行 & 指定列
df_new = date_frame.iloc[0:3, 0:2]# 前3行中的,前2列的信息
print(df_new)
trade_date ts_code
a 20200818 600030.SH
b 20200818 600118.SH
c 20200818 600276.SH
4.获取指定行 & 指定列(2)
df_new = date_frame.iloc[[0, 3], [0, 2]]# 获取索引为0 和 3的行,对应的索引为0列和2列值
print(df_new)
trade_date name
a 20200818 中信证券
d 20200818 贵州茅台