Python数据分析|pandas 实用方法(3)数据删除及数据索引和切片

删除指定轴上的项

删除 Series 的元素或 DataFrame 的某一行(列),通过对象的 .drop(labels, axis=0)方法。.drop() 返回的是一个新对象,原对象不会被改变。

原始数据

from pandas import Series,DataFrame

import pandas as pd

import numpy as np

ser = Series(list(‘abcdefg’))

ser

Out[4]:

0 a

1 b

2 c

3 d

4 e

5 f

6 g

dtype: object

data = {‘state’:[‘Ohino’,’Ohino’,’Ohino’,’Nevada’,’Nevada’], ‘year’:[2000,2001,2002,2001,2002], ‘pop’:[1.5,1.7,3.6,2.4,2.9]}

df = DataFrame(data)

df

Out[5]:

pop state year

0 1.5 Ohino 2000

1 1.7 Ohino 2001

2 3.6 Ohino 2002

3 2.4 Nevada 2001

4 2.9 Nevada 2002

删除操作

ser.drop([1,3])

Out[9]:

0 a

2 c

4 e

5 f

6 g

dtype: object

df.drop([1,3])

Out[15]:

pop state year

0 1.5 Ohino 2000

2 3.6 Ohino 2002

4 2.9 Nevada 2002

df.drop(‘year’,axis = 1)

Out[16]:

pop state

0 1.5 Ohino

1 1.7 Ohino

2 3.6 Ohino

3 2.4 Nevada

4 2.9 Nevada

pandas 支持通过 obj[::] 的方式进行索引和切片,以及通过布尔型数组进行过滤。

在这里还是要推荐下我自己建的Python开发学习群:304050799,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

注意:因为 pandas 对象的 index 不限于整数,所以当使用非整数作为切片索引时,它是末端包含的,但是当使用整数作为切片索引时,它是不包含末端的。

Series的索引切片

ser[3]

Out[22]: ‘d’

ser1 = Series(range(5),index = [‘a’,’b’,’c’,’d’,’e’])

ser1

Out[19]:

a 0

b 1

c 2

d 3

e 4

dtype: int32

ser[:2]

Out[20]:

0 a

1 b

dtype: object

ser1[:’c’]

Out[21]:

a 0

b 1

c 2

dtype: int32

从上面可以看出ser切片时不包含末端,但是ser1切片时包含末端

DataFrame的索引切片

DataFrame 对象的索引方式有两个轴向(双重索引),DataFrame 对象的标准切片语法为:.ix[::,::]。ix 对象可以接受两套切片,分别为行(axis=0)和列(axis=1)的方向。

df.ix[:2,:3]

Out[23]:

pop state year

0 1.5 Ohino 2000

1 1.7 Ohino 2001

2 3.6 Ohino 2002

df.ix[:2,’state’]

Out[24]:

0 Ohino

1 Ohino

2 Ohino

Name: state, dtype: object

如果不使用 ix ,直接切的情况就特殊了:

– 索引时,选取的是列

– 切片时,选取的是行

df[‘state’]

Out[25]:

0 Ohino

1 Ohino

2 Ohino

3 Nevada

4 Nevada

Name: state, dtype: object

df[:3]

Out[26]:

pop state year

0 1.5 Ohino 2000

1 1.7 Ohino 2001

2 3.6 Ohino 2002

有一种特殊情况是:假如有 ser 这样的Series 索引是 index = [2,4,5],当我们使用 ser[2] 索引的时候,到底会被解释为第1个索引还是第3个索引,答案是第1个索引,即当你的数组 index 是整数类型的时候,你使用整数索引,都会被自动解释为基于标签的索引,而不是基于位置的索引。要想消除这种歧义,推荐使用一下两种索引方式:

.loc[label] 这是严格基于标签的索引(包含边界元素)

.iloc[inte] 这是严格基于整数位置的索引(不包含边界元素)

.ix[] 更像是这两种严格方式的智能整合版。

df1 = DataFrame(data,index = [1,3,5,7,9])

df1

Out[20]:

pop state year

1 1.5 Ohino 2000

3 1.7 Ohino 2001

5 3.6 Ohino 2002

7 2.4 Nevada 2001

9 2.9 Nevada 2002

df1.loc[:3]

Out[21]:

pop state year

1 1.5 Ohino 2000

3 1.7 Ohino 2001

df1.iloc[:3]

Out[22]:

pop state year

1 1.5 Ohino 2000

3 1.7 Ohino 2001

5 3.6 Ohino 2002

切片时使用布尔型数组

df[‘year’] ==2002

Out[37]:

0 False

1 False

2 True

3 False

4 True

Name: year, dtype: bool

df[df[‘year’] ==2002]

Out[38]:

pop state year

2 3.6 Ohino 2002

4 2.9 Nevada 2002

选出满足列条件的行。

df.ix[2] == 2002

Out[49]:

pop False

state False

year True

Name: 2, dtype: bool

df.ix[:3,df.ix[2]==2002]

Out[50]:

year

0 2000

1 2001

2 2002

3 2001

选出满足行条件的列。

    原文作者:Python爬虫学习
    原文地址: https://www.jianshu.com/p/046c0fb2ade2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞