数据筛选总结

2020-05-27  本文已影响0人  YoungDou

数据处理一直在做,但是每次用时,总感觉很陌生,所以在此记录下来。
这里假定数据不存在异常空缺的情况。这里只记录常用参数。

1.去重处理
data.drop_duplicates(subset, keep)

subset指在去重中,考虑哪些列中重复的数据。比如subset=["列名1","列名2"]
keep指保留那一条重复数据。可选值fist,last,False(删除所有重复数据)

去重后,需要重置索引

data.reset_index(drop=True, inplace=True) 删除原始索引列
2.索引筛选

通过列名(索引)、列号(行号)进行选取,所以衍生出了不同操作函数。

loc函数

使用索引与列名,两个参数分别对应行和列。如果未指定index,使用默认的。

import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(16).reshape(4,4),columns=list('abcd'),index=list('ABCD'))
print(df)
    a   b   c   d
A   0   1   2   3
B   4   5   6   7
C   8   9  10  11
D  12  13  14  15
print(df.loc['A','b']) #选值
1
print(df.loc[['A','B']]) #选行
   a  b  c  d
A  0  1  2  3
B  4  5  6  7
print(df.loc[:,['a','b']]) #选列
    a   b
A   0   1
B   4   5
C   8   9
D  12  13
print(df.loc[['A','B'],['a','b']]) #选符合对应行列数据
   a  b
A  0  1
B  4  5
iloc函数

使用行号列号进行选取,用法与loc没有多大差别。需要注意的是,行号与索引的区别,索引进行选取后不会变化。

ix函数

混合索引,这里的混合指行列参数不局限于只用行号或者索引(列名或者列号)。即iloc与loc的混合体。
但是,需要注意的是,这样的非法混合

print(df.ix[[0,'B']]) #要么是['A','B'],或者[0:2,:]
     a    b    c    d
0  NaN  NaN  NaN  NaN
B  4.0  5.0  6.0  7.0
at/iat函数

使用index与行号进行快速取值

print(df.iat[0,1])
1
print(df.iat['A','b'])
1
3.筛选

常见的操作,使用关系运算符

print(df['a'])
A     0
B     4
C     8
D    12
print(df[['a','b']])
    a   b
A   0   1
B   4   5
C   8   9
D  12  13
print(df[df['a']>4])
    a   b   c   d
C   8   9  10  11
D  12  13  14  15
print(df[['a','b']][df['a']>4]) #指定了列名
    a   b
C   8   9
D  12  13

使用isin函数根据特定值筛选记录

print(df[(df.a.isin([4, 8]))&(df.b.isin([5,]))])
   a  b  c  d
B  4  5  6  7

这里还有一个复杂的做法实现选取特定行

    user_cols = [x for i, x in enumerate(data.index) if
            data.iat[i, 0] not in list]
    data.drop(user_cols, axis=0, inplace=True)
上一篇下一篇

猜你喜欢

热点阅读