pandas直接讀取文件相當方便,但是剛接觸時浆兰,DataFrame型的行列選擇極易讓人混亂磕仅,常與array型的選取混淆∧魉希總結一下兩種結構不同的行列操作宽涌。
# 首先弄點數(shù)據(jù)
import numpy as np
import pandas as pd
a = np.random.randn(3,4)
a = pd.DataFrame(a)
a.columns=['A','B','簡','書']
b = np.array(a)
a
Out:
A B 簡 書
0 -0.111949 0.527505 2.368722 1.224539
1 0.682014 1.437826 0.004001 -0.330349
2 0.716501 -1.719973 0.718745 2.023330
b
Out:
array([[-0.11194892, 0.5275052 , 2.36872241, 1.22453866],
[ 0.68201417, 1.43782573, 0.00400142, -0.33034887],
[ 0.7165014 , -1.71997254, 0.71874518, 2.02332967]])
行選擇
DataFrame
可以使用loc[]平夜,iloc[]蝶棋,ix[]來選擇。
# 連續(xù)選擇忽妒,注意括號里的包含關系
a.loc[1:3]
Out:
A B 簡 書
1 0.682014 1.437826 0.004001 -0.330349
2 0.716501 -1.719973 0.718745 2.023330
# 選擇單行
a.loc[[1,2]]
Out:
A B 簡 書
1 0.682014 1.437826 0.004001 -0.330349
2 0.716501 -1.719973 0.718745 2.023330
# 選擇某個數(shù)據(jù)
a.ix[[1],[1]]
Out:
B
1 1.437826
array
相比之下玩裙,矩陣的操作則要方便許多。
# 連續(xù)選擇
b[1:3]
Out:
array([[ 0.68201417, 1.43782573, 0.00400142, -0.33034887],
[ 0.7165014 , -1.71997254, 0.71874518, 2.02332967]])
# 選擇單行
b[[1,2]]
Out:
array([[ 0.68201417, 1.43782573, 0.00400142, -0.33034887],
[ 0.7165014 , -1.71997254, 0.71874518, 2.02332967]])
# 某個數(shù)據(jù)選擇
b[1,1]
Out: 1.4378257322265775
列選擇
DataFrame
較之行選擇段直,DataFrame格式的列選擇要簡單些吃溅,中英文的column都可以直接通過列名選取。
# 通過列名
a.A
Out:
0 -0.111949
1 0.682014
2 0.716501
Name: A, dtype: float64
a[['B','書']]
Out:
B 書
0 0.527505 1.224539
1 1.437826 -0.330349
2 -1.719973 2.023330
有時候column的名稱復雜鸯檬,經(jīng)常要切換輸入法决侈,很不方便,或者想選擇很多列時喧务,可以通過索引來進行選取赖歌。pandas這里有個小坑枉圃,連續(xù)列直接用a[1:3]會報錯 =='
# 通過索引號,連續(xù)列選擇
a[np.arange(1,3)]
Out:
B 簡
0 0.527505 2.368722
1 1.437826 0.004001
2 -1.719973 0.718745
# 通過索引號庐冯,選擇特定列
a[[1,3]]
Out:
B 書
0 0.527505 1.224539
1 1.437826 -0.330349
2 -1.719973 2.023330
array
感受下數(shù)值處理時矩陣的簡捷直觀孽亲。
b[:,[1,3]]
Out:
array([[ 0.5275052 , 1.22453866],
[ 1.43782573, -0.33034887],
[-1.71997254, 2.02332967]])
b[[1,2],[1,2]]
Out: array([ 1.43782573, 0.71874518])
補充下openpyxl打開xlsx文件下數(shù)據(jù)的選取。
import openpyxl
wb = openpyxl.load_workbook('file path')
sheets = wb.get_sheet_names()
sheet1 = wb.get_sheet_by_name(sheets[0])
sheet1['B1'].value # 通過單元格索引打開
sheet1.cell(row=1, column=1).value # 通過行列號
兩種結構可以方便的相互轉(zhuǎn)換展父,pd.DataFrame()返劲,np.array()【或者np.asarray(),兩者有略微的差別】栖茉。挑一種順手的套路吧篮绿!
TBC