pandas常用操作,你想要都在这里。。。

用了这么久的pandas,但每次使用的时候需要靠网络才能勉强度日(*╹▽╹*)。

集中整理一下,经常用到但又容易搞混的功能。。。

 

1,、iloc与loc的用法与区别

#这两个功能非常基础,也经常会用到,而且往往可以玩出不一样的花样~ 

#以该数据集为例
import pandas as pd
import numpy as np

df = pd.DataFrame(np.array(list('abcd1abcd1abcd0abcd1abcd0badc0')).reshape(6,5),
index=range(6),columns=['A','B','C','D','E'])

A B C D E 0 a b c d 1 1 a b c d 1 2 a b c d 0 3 a b c d 1 4 a b c d 0 5 b a d c 0

#常规操作
【1】
df.loc[1]
A a B b C c D d E 1

df.iloc[1]
A a B b C c D d E 0
# 运行会发现,只返回一行的话,iloc和loc的结果都是一样的

【2】
df.loc[1:4]
A B C D E 1 a b c d 1 2 a b c d 0 3 a b c d 1 4 a b c d 0

df.iloc[1:4]
A B C D E 1 a b c d 1 2 a b c d 0 3 a b c d 1
#这下稍有些不同,loc是闭区间返回,
iloc是开区间返回,更符合一般的切片操作
【3】
df.loc[1:4,:3] #会报错
df.loc[1:4,['A','B']] #可以通过具体的列进行索引
A B 1 a b 2 a b 3 a b 4 a b

df.iloc[1:4,:3]
A B C 1 a b c 2 a b c 3 a b c
df.iloc[1:4,['A','B']]
#会报错

df.iloc[1:3,[3]] # 但可以通过列标签的索引切出单独的列,或者用区间的形式
D 1 d 2 d 3 d

总结:

loc: 一般通过行标签或者列标签进行索引进行切片

iloc:一般通过行索引或者列索引进行切片


df.iloc[:,df.columns!='E']
df.loc[:,df.columns!='E'] #二者都可以通过这样的方式进行切片,可以用于feature与label的分离,但因为loc是闭区间切片,因此可能更适合

df.columns!='E' #返回的是一个布尔型的列表

df.loc[1:3,[True,True,True,False]]
#因此也可以这样进行索引
   A  B  C
1  a  b  c
2  a  b  c
3  a  b  c

 

2、随机打乱DataFrame数据的排序

#以该数据及为例
import
pandas as pd import numpy as np
df
= pd.DataFrame(np.array(list('abcdcbaceebcabcdacbeaabcbfnaeb')).reshape(5,6), index=range(5),columns=['a','b','c','d','e','f'])

pandas提供了sample的方法:

df = df.sample(frac=1).reset_index(drop=True) #加上reset_index是为了让随机打乱的样本还是按照正常的顺序进行排序,如果要保留打乱的索引,不加即可
运行结果如下:
a b c d e f 4 b f n a e b 2 a b c d a c 1 a c e e b c 3 b e a a b c 0 a b c d c b

这里还可以设置要返回的比例,比如df中有10行数据,我只想返回其中的40%,那么frac=0.4
df = df.sample(frac=0.4).reset_index(drop=True)
a b c d e f 0 a c e e b c 1 a b c d a c

延伸:当然还有其他方法,比如利用sklearn库,或者利用numpy
from sklearn.utils import shuffle
sk = shuffle(df).reset_index()

np = df.iloc[np.random.permutation(len(df))]

 

 

未完待续。。。

 

posted @ 2019-06-29 00:38  编程小虾米  阅读(1039)  评论(0编辑  收藏  举报