数据处理一直在做,但是每次用时,总感觉很陌生,所以在此记录下来。
这里假定数据不存在异常空缺的情况。这里只记录常用参数。
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)
网友评论