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]實現的是相同的功能~
# 通過一個布爾判斷進行篩選,篩選出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)]
# 選擇第一行(第一行的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:]
# 選擇第一列(第一列的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']
# 選擇第一行
''' 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:]
# 選擇第一列
''' 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]
# 選擇第一列(第一列的column是'u')
''' u 1 i 2 r 3 time 4 Name: 10, dtype: int32 '''
data = df['u']
# 使用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()