我爱编程

【python小白】日常工作中的几个TIPS(二)

2018-01-31  本文已影响0人  FLYNNNOTES

pandas直接读取文件相当方便,但是刚接触时,DataFrame型的行列选择极易让人混乱,常与array型的选取混淆。总结一下两种结构不同的行列操作。

# 首先弄点数据
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[]来选择。

# 连续选择,注意括号里的包含关系
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

# 选择某个数据
a.ix[[1],[1]]
Out: 
          B
1  1.437826

array

相比之下,矩阵的操作则要方便许多。

# 连续选择
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]])

# 某个数据选择
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的名称复杂,经常要切换输入法,很不方便,或者想选择很多列时,可以通过索引来进行选取。pandas这里有个小坑,连续列直接用a[1:3]会报错 =='

# 通过索引号,连续列选择
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

感受下数值处理时矩阵的简捷直观。

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文件下数据的选取。

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    # 通过行列号

两种结构可以方便的相互转换,pd.DataFrame(),np.array()【或者np.asarray(),两者有略微的差别】。挑一种顺手的套路吧!

TBC

上一篇 下一篇

猜你喜欢

热点阅读