天天看点

Pandas---结构化数据(DataFrame)----获取index & 列名 & 值 & 列信息 & 行信息 & loc函数 & iloc函数

文章目录

      • 1.单独获取df里面的三个部分index/colume/values
      • 2.获取df的行数/列数 & 前几行 & 后几行
      • 3.获取列信息
        • 1.键值索引方式
        • 2.切片方式
      • 4.获取行信息
        • 1.键值索引方式
        • 2.切片方式
      • 5.loc函数(行键值、列键值)
        • 1.获取行信息
        • 2.获取列信息
        • 3.指定某行&某列的值
      • 6.iloc函数(行切片、列切片)
        • 1.获取行信息
        • 2.获取列信息
        • 3.获取指定行 & 指定列
        • 4.获取指定行 & 指定列(2)
  1. 如果你对DataFrame(df)数据类型还不是很熟悉,建议先阅读另一篇基础博文:Pandas—结构化数据(DataFrame)来源 & 转成字典(dict)
  2. 如下内容如提到df,都代表的是DataFrame的结构化数据

1.单独获取df里面的三个部分index/colume/values

  1. 在推荐的博文里面,我们已经介绍了,如何把df数据转化为一个包含三个key的大字典。
  2. https://blog.csdn.net/chenmozhe22/article/details/108095974
  3. 那么如果只是想获取某一部分,如何获取呢?
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函数,也是获取行信息、列信息的功能。但它又不止于此,还可以指定某个某列去获取,这个才是它的核心功能。
行信息的方式:
  • 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函数,也是获取行信息、列信息的功能。但它也有自己的特色,主要是通过切片的形式获取行信息和列信息。
行信息的方式:
  • 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  贵州茅台