python dataframe去重_Python——DataFrame基础操作

DataFrame理解

DataFrame可以看做是有序排列的若干Series对象,这里的“排列”是指这些Series都有共同的索引。

一、读取文件

dt =pd.read_csv(path)

dt=pd.read_excel(path)

dt= pd.read_table(path, sep=',')

二、索引

第一类索引是iloc属性,表示取值和切片都是显式的,dt.iloc[1:3] #注:从0开始的左闭右开区间

第二类索引是loc属性,表示索引是隐式的,如dt.loc[:'Illinois', :'pop']

第三种索引ix可实现一种混合效果,如dt.ix[:3, :'pop']

三、合并与连接

1、pd.concat()

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,

keys=None, levels=None)

其中,axis=0是按照行合并,axis=1是按列合并(也可写成axis='col')。axis=1时是按照索引合并的。

ser1 = pd.Series(['A','B','C'])

ser2= pd.Series(['D','E','F'])

ser3= pd.Series(['G','H','I'])

a= pd.concat([ser1,ser2])

a的结果如下,如果直接按列合并ser3,就会报错。

0 A1B2C

0 D1E2F

dtype: object

pd.concat([a, ser3], axis=1)

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

因为此时a的索引是保留原本的两个Series的Index的,可通过设置ignore_index=True,重置索引,

2、 pd.append()

ser1.append(ser2)

Pandas的append()不直接更新原有对象的值,而是为合并后的数据创建一个新对象。

3、pd.merge()

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False,

sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)

详见help(pd.merge)

四、分组(Gruopby)

分组统计时需要使用到groupby方法,其原理是通过分割(split)、应用(apply)和组合(combine)得到结果。

Groupby是对数据按照指定列进行分割,返回一个DataFrameGroupBy对象。DataFrameGroupBy对象里面隐藏着若干组数据,但是没有应用累计函数之前不会计算。

import numpy as np

rng = np.random.RandomState(0)

df = pd.DataFrame({'key':['A','B','C','A','B','C'],

'data1':range(6),

'data2':rng.randint(0,10,6)},

columns=['key','data1','data2'])print(df)

df.groupby('key')

key data1 data2

0 A 0 5

1 B 1 0

2 C 2 3

3 A 3 3

4 B 4 7

5 C 5 9

Out[15]:

(1)聚合aggregate

应用函数后会对DataFrameGroupBy对象展开计算。

df.groupby('key').aggregate(['min',np.median,max])

data1data2

minmedianmaxminmedianmax

key

A

0

1.5

3

3

4.0

5

B

1

2.5

4

0

3.5

7

C

2

3.5

5

3

6.0

9

还可以通过字典指定不同列需要的函数

df.groupby('key').aggregate({'data1':'min','data2':'max'})

data1data2

key

A

0

5

B

1

7

C

2

9

(2)过滤filter

deffilter_func(x):return x['data2'].std() > 4

print(df.groupby('key').std())print(df.groupby('key').filter(filter_func))

data1data2

key

A

2.12132

1.414214

B

2.12132

4.949747

C

2.12132

4.242641

keydata1data2

1

B

1

0

2

C

2

3

4

B

4

7

5

C

5

9

(3)转换transform

df.groupby('key').transform(lambda x:x-x.mean())

data1data2

0

-1.5

1.0

1

-1.5

-3.5

2

-1.5

-3.0

3

1.5

-1.0

4

1.5

3.5

5

1.5

3.0

五、数据透视表

详见help(pd.pivot_table)

titanic.pivot_table('survived', index='sex', columns='class', aggfunc={'survived':sum, 'fare':'mean'})

六、其他操作(排序、去重、计算及按行列应用函数等)

1、排序

按照索引排序

df.sort_index(ascending=False)

keydata1data2

5

C

5

9

4

B

4

7

3

A

3

3

2

C

2

3

1

B

1

0

0

A

0

5

按照值排序

df.sort_values(by=['key','data2'])

keydata1data2

3

A

3

3

0

A

0

5

1

B

1

0

4

B

4

7

2

C

2

3

5

C

5

9

2、去重

df.drop_duplicates('data2', keep='first')

keydata1data2

0

A

0

5

1

B

1

0

2

C

2

3

4

B

4

7

5

C

5

9

想要知道某一列有多少个不重复的元素可以用df['data1'].nunique()

3、删除Drop

按照行删除

先选出需要删除的行的index,再删除指定index

df.drop(df.loc[df['key']=='A'].index, axis=0)

keydata1data2

1

B

1

0

2

C

2

3

4

B

4

7

5

C

5

9

按照列删除

df.drop(['key','data2'], axis=1)

参考:《Python数据科学手册》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值