Pandas_02索引及增删改查

17 篇文章 2 订阅

一、索引

1、索引的基本设置

1.1、设置行索引

  • DataFrame.set_index() 设置索引

准备数据:

import pandas as pd
stock_data = pd.read_csv('File/csv_files/stock_day.csv')

# pd.head()默认查看前五行数据
stock_data.head()

在这里插入图片描述设置索引

'''
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) 
参数解释:
    keys:列标签(列索引)
    drop:默认为True,在values中删除被设置为索引的列
    append:默认为False,保留原来的索引,追加索引
    inplace:默认为False,就地修改DataFrame,不再创建新对象
    verify_integrity:默认为false,检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法的性能
'''
# 设置trandate列数据为行索引
stock_data.set_index(keys = 'trandate',inplace=True)
stock_data.head()

在这里插入图片描述
查看行索引:

stock_data.index
Index(['2018-02-27', '2018-02-26', '2018-02-23', '2018-02-22', '2018-02-14',
       '2018-02-13', '2018-02-12', '2018-02-09', '2018-02-08', '2018-02-07',
       ...
       '2015-03-13', '2015-03-12', '2015-03-11', '2015-03-10', '2015-03-09',
       '2015-03-06', '2015-03-05', '2015-03-04', '2015-03-03', '2015-03-02'],
      dtype='object', name='trandate', length=643)

查看行索引的名字

stock_data.index.name
# 'trandate'
  • DataFrame.reset_index() 重置索引
'''
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')

参数解释
level:可填入int, str, tuple, list类型, 默认 None,
        仅从索引中删除给定级别。默认情况下删除所有级别。
        
drop:默认False,索引列会被还原为普通列,行索引被重置为默认的int索引
      设置为True,索引列丢失。

inplace:默认为False,就地修改DataFrame,不再创建新对象
col_level:int或str,默认值为0,如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一级。
col_fill:对象,默认'',如果列有多个级别,则确定其他级别的命名方式。如果没有,则重复索引名

使用场景:
数据清洗时,若将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引
'''
stock_data.head()

在这里插入图片描述重置索引

stock_data.reset_index(drop=True,inplace=True)
stock_data.head()

行索引变成了默认的int型索引,且因为设置了inplace=True,数据中没有了trandate在这里插入图片描述
1.2、设置列索引

数据准备:

stock_data = pd.read_csv('File/csv_files/stock_day.csv',usecols = ['trandate','open','close'])
stock_data.head()

在这里插入图片描述列索引:

stock_data.columns
# Index(['trandate', 'open', 'close'], dtype='object')

虽然列索引返回的是个列表,但是不可以通过下标去修改其中的元素,会出现如下的报错:

stock_data.columns[0]='date'
TypeError: Index does not support mutable operations

正确修改姿势:

对整个列索引进行修改并重新赋值

column_label = ['交易日期','开市价格','闭市价格']

# 替换整个列索引
stock_data.columns = column_label
stock_data

在这里插入图片描述

2、数据的索引查询

1.1、使用索引名直接索引

直接使用行索引或列索引,要注意先列后行

数据如下:

在这里插入图片描述

  • 使用列索引
stock_data["open"].head()

返回行索引及想要查询的列数据

在这里插入图片描述

  • 使用行索引

直接使用行索引,报错KeyError。

stock_data["2018-02-07"]

先索引列,再索引行

# 直接使用行列索引名时,需要先列再行
stock_data['open']["2018-02-07"]

22.69

1.2、按索引名字索引: DataFrame.loc[ ]

  • 可直接单独使用行索引名进行索引,不能单独使用列索引名进行索引
 stock_data.loc["2018-02-07"]

在这里插入图片描述

  • 同时对行和列进行索引时,先行后列
stock_data.loc["2018-02-07"]['close']
21.29
  • 可结合数字索引一起使用
stock_data.loc["2018-02-07"][5]
-0.5

1.3、按数字索引: DataFrame.iloc[ ]

  • 可单独索引行
# 取第二行的数据
stock_data.iloc[1]

在这里插入图片描述

  • 可单独索引列
# 取第五列的数据
stock_data.iloc[:,4].head()

在这里插入图片描述

  • 行在前列在后
# 取第2行、第4列的数据
stock_data.iloc[1][3]
22.8

取多行多列数据

# 取3-4行、1-2列数据
stock_data.iloc[2:4,0:2].head()

在这里插入图片描述
根据坐标取数据

# 根据坐标取数据(2,0)、(4,2)
stock_data.iloc[[2,4],[0,2]] 

在这里插入图片描述

3、索引的排序

DataFrame.sort_index()

'''
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)

常用参数说明:
axis:默认为0,按列进行排序
ascending:默认为True,升序排序;False,降序排序
inplace:默认False,创建一个排序后的新对象;为True时,对DataFrame数组进行原地操作,不创建新对象
'''
stock_data.sort_index().head()

升序:
在这里插入图片描述

stock_data.sort_index(ascending = False).head()

降序:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzYbSBYV-1600703784984)(https://img-blog.csdnimg.c/20200921234403456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzQxODA1MDk2,size_16,color_FFFFFF,t_70#pic_center)]

二、DataFrame的增删改查

主要以DataFrame为例,方法差不多

1、增

'''
对新列进行复制
DataFrame[new_column] = 
'''

stock_data['diff_price'] = stock_data['close'] - stock_data['open']
stock_data.head()

新增了diff_price列
在这里插入图片描述
2、删

在这里插入图片描述
删除行

'''
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

常用参数说明:
labels:要删除的行或列索引标签
axis:默认0,删除行;1,删除列
index:效果等同于labels
columns:效果等同于labels
inplace:是否直接对原数组进行操作

注意:
使用labels要注意指定axis
使用index,columns则无需搭配axis
'''
stock_data.drop(labels =['2018-02-26','2018-02-23']).head()

箭头为原本’2018-02-26’,'2018-02-23’行所存在的位置,数据被删除
在这里插入图片描述
删除列

# 等同于stock_data.drop(columns =['open','close'],axis = 1).head()
stock_data.drop(labels =['open','close'],axis = 1).head()

‘open’,'close’两列被删除

在这里插入图片描述

3、改

初始数据:
在这里插入图片描述

  • 修改列顺序
'''
DataFrame.insert(loc, column, value, allow_duplicates=False)

常用参数说明:
loc:要插入的位置
column:列标签
value:列标签对应的列数据
'''

# 1、取出要改变位置的列数据(Seires)
high = stock_data['high']
high.head()

在这里插入图片描述

# 删除要改变位置的列数据
stock_data.drop(columns='high',inplace = True)
stock_data.head()

open后面的high列已被删除
在这里插入图片描述

# 插入删除的数据到指定位置
stock_data.insert(2,'high',high)
stock_data.head()

在这里插入图片描述

  • 修改行列索引
'''
DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)

常用参数说明:
index:行索引 ,index = {旧索引名:新索引名}
columns:列索引 ,columns = {旧索引名:新索引名}
'''

stock_data.rename(index = {'2018-02-27':'2018年2月27号'},columns ={'open':'开市','close':'闭市'}).head()

在这里插入图片描述

4、查

  • DataFrame.query()
'''
DataFrame.query(expr, inplace=False, **kwargs)

常用参数说明:
expr:表达式
inplace:是否将原数组修改为返回的查询结果
'''
stock_data.query("open >20 & open<22",inplace=True)

在这里插入图片描述

  • DataFrame.between()

返回布尔值

'''
DataFrame[column].between(a, b, inclusive =True)

常用参数说明:
inclusive = True ,区间为[a, b] 闭区间
inclusive = False ,区间为(a, b) 开区间
'''

stock_data['p_change'].between(-1,1,inclusive =True).head()

在这里插入图片描述

  • DataFrame.isin()

在这里插入图片描述

'''
DataFrame.isin(values)

values:只能放入列表或者字典类型的数据

函数作用:
查看数组是否有元素与values中的元素相同
'''
cust_data.isin(['行业码支付',]).head()

在这里插入图片描述

  • DataFrame.str.contain()
'''
DataFrame[columns].str.contain(values)

函数作用:
查看数组是否有元素包含values中的字符
'''
cust_data['渠道返回说明'].str.contains('交易').head()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值