美文网首页大数据 爬虫Python AI SqlPython程序员vpython web开发
Python数据分析|pandas 实用方法(3)数据删除及数据

Python数据分析|pandas 实用方法(3)数据删除及数据

作者: Python爬虫学习 | 来源:发表于2018-06-29 14:18 被阅读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数据分析|pandas 实用方法(3)数据删除及数据

        本文链接:https://www.haomeiwen.com/subject/rmlayftx.html