Pandas库常用功能
一、选择行和列
1.1 创建示例数据
import pandas as pd
import numpy as np
value = np.array([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]])
index = np.array([10, 20, 30])
column = np.array(['u', 'i', 'r', 'time'])
df = pd.DataFrame(data=value, index=index, columns=column)
'''
u i r time
10 1 2 3 4
20 2 3 4 5
30 3 4 5 6
'''
主要涉及到loc和iloc的用法,老版本的python里还有ix,不过ix已被新版本弃用
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing
很容易发现,loc是根据属性名进行索引,而iloc则是根据列号进行索引,如df.loc[:, ‘u’]和df.iloc[:, 0]实现的是相同的功能~
1.1 根据条件选择满足条件的行
# 通过一个布尔判断进行筛选,筛选出time列大于4的行
'''
u i r time
20 2 3 4 5
30 3 4 5 6
'''
data = df[df.time > 4]
# 也可以使用设置多个条件,如加上要求评分为5分的条件
'''
u i r time
30 3 4 5 6
'''
data = df[(df.time > 4) & (df.r == 5)]
1.2 使用loc进行选择
1.2.1 选择行
# 选择第一行(第一行的index是10)
'''
u 1
i 2
r 3
time 4
Name: 10, dtype: int32
'''
data = df.loc[10]
# 选择第二行及之后的行(第二行的index是20)
'''
u i r time
20 2 3 4 5
30 3 4 5 6
'''
data = df.loc[20:30]
# 或者data = df.loc[20:]
1.2.2 选择列
# 选择第一列(第一列的column是'u')
'''
u 1
i 2
r 3
time 4
Name: 10, dtype: int32
'''
data = df.loc[:, 'u']
# 选择第二列到第四列(第二列的column是'i',第四列的column是‘time’)
'''
i r time
10 2 3 4
20 3 4 5
30 4 5 6
'''
data = df.loc[:, 'i':'time']
1.3 使用iloc进行选择
1.3.1 选择行
# 选择第一行
'''
u 1
i 2
r 3
time 4
Name: 10, dtype: int32
'''
data = df.iloc[0]
# 选择第二行及之后的行
'''
u i r time
20 2 3 4 5
30 3 4 5 6
'''
data = df.iloc[1:3]
# 或者data = df.iloc[1:]
1.3.2 选择列
# 选择第一列
'''
u 1
i 2
r 3
time 4
Name: 10, dtype: int32
'''
data = df.iloc[:, 0]
# 选择第二列到第四列
'''
i r time
10 2 3 4
20 3 4 5
30 4 5 6
'''
data = df.iloc[:, 1:4]
1.4 直接使用column选择列
# 选择第一列(第一列的column是'u')
'''
u 1
i 2
r 3
time 4
Name: 10, dtype: int32
'''
data = df['u']
1.5 选择某一块数据
# 使用loc
'''
u i r
10 1 2 3
20 2 3 4
'''
data = df.loc[10:20, 'u':'r']
# 使用iloc
'''
u i r
10 1 2 3
20 2 3 4
'''
data = df.iloc[0:2, 0:3]
二、去重
import pandas as pd
# 数据共有四列,列名分别为u,i,r和time
#u i r time
#1 3 4 1
#2 1 5 2
#3 1 5 3
#1 3 4 2
#1 3 4 1
df = pd.read_csv('rating.txt', names=['u', 'i', 'r', 'time'])
很明显,第一条数据和第五条数据重复,需要对数据集进行去重,主要使用的是drop_duplicates()
# u i r time
#0 1 3 4 1
#1 2 1 5 2
#2 3 1 5 3
#3 1 3 4 2
data = df.drop_duplicates()
但如果不考虑时间,我们会发现第一、四、五条数据重复,可以结合上面的选择列的方法进行去重
# u i r
#0 1 3 4
#1 2 1 5
#2 3 1 5
data = df.loc[:, ['u', 'i', 'r']].drop_duplicates()