计算机视觉系列–Pandas基础

Pandas库是非常好用的数据处理库,下面对一些常见语法进行介绍。

import numpy as np
import pandas as pd

创建pandas对象

  • 通过series创建
s=pd.Series([1,3,5,np.nan,6,8])
print(s)
#0    1.0
#1    3.0
#2    5.0
#3    NaN
#4    6.0
#5    7.0
#dtype: float64
  • 通过dataframe创建
#使用DataFrame,通过index指定行索引,columns指定列索引
dates=pd.DataFrame(np.random.random(2,2),index=[1,2],columns=list('AB'))
print(dates)
#          A         B
#1  0.234430  0.115264
#2  0.583374  0.883520

pandas数据属性

属性说明
df.index显示索引
df.columns显示列索引
df.describe()显示常见的一些统计数据

pandas数据操作

  • 数据转置
a=pd.DataFrame(np.random.random((2,2)),index=[1,2],columns=list('AB'))
print(a)
#          A         B
#1  0.137045  0.489604
#2  0.578191  0.884470
print(a.T)	#转置
#          1         2
#A  0.137045  0.578191
#B  0.489604  0.884470
  • 按索引排序
    通过frame.sort_index(axis=0)按索引排序:默认按行索引排序,指定axis=1则按列索引排序.
a=pd.DataFrame(np.random.random((2,2)),index=[2,1],columns=list('BA'))
print(a)
#          B         A
#2  0.987608  0.368984
#1  0.694016  0.315816
print(a.sort_index())
#          B         A
#1  0.694016  0.315816
#2  0.987608  0.368984
print(a.sort_index(axis=1))
#          A         B
#2  0.368984  0.987608
#1  0.315816  0.694016
  • 按值排序
    通过sort_values(by,axis=0,…)进行值的排序
    by:这个参数要求传入一个字符或者是一个字符列表,用来指定按照哪个元素进行排序
    axis=0表示调整行,axis=1表示调整列.
print(a)
#          B         A
#2  0.987608  0.368984
#1  0.694016  0.315816
print(a.sort_values(by='A'))	#根据'A'这列的值来调整行
#          B         A
#1  0.694016  0.315816
#2  0.987608  0.368984
print(a.sort_values(by=2,axis=1))	#根据行索引2这行的值来调整列
#          A         B
#2  0.368984  0.987608
#1  0.315816  0.694016
  • apply()函数
    DataFrame.apply(func,axis=0,…)
    参数说明:
  1. func:传入的函数,相当于c/c++的函数指针
  2. axis=0则将一列数据传入函数,axis=1则每次将一行数据传入函数
a=pd.DataFrame(np.random.random((2,2)),index=[1,2],columns=list('AB'))
print(a)
#          A         B
#1  0.144386  0.218847
#2  0.127204  0.390031
print(a.apply(np.cumsum))	#np.cumsum对每一列递归累加
#          A         B
#1  0.144386  0.218847
#2  0.271591  0.608878
print(a.apply(lambda x:x.max()-x.min(),axis=1))	#每一行的最大值减去最小值
#1    0.074460
#2    0.262827
#dtype: float64

数据访问

参考pandas索引和选择数据

  • 通过head(),tail()查看数据
函数/方法说明
df.head(n)查看数据df的前n行
df.tail(n)查看数据df的后n行
  • 通过切片索引[]获取
    切片索引[]只能输入一个维度,不能用逗号输入两个维度,有两种用法。
  1. 使用列名:输入列索引,而且必须是列名。
b=pd.DataFrame(np.random.random((3,3)),index=list('abc'),columns=list('ABC'))
print(b)
#          A         B         C
#a  0.598969  0.729189  0.948198
#b  0.740842  0.081477  0.956650
#c  0.926341  0.341224  0.376946
print(b['B'])
#a    0.729189
#b    0.081477
#c    0.341224
#Name: B, dtype: float64
print(b[['A','B']])
#          A         B
#a  0.598969  0.729189
#b  0.740842  0.081477
#c  0.926341  0.341224
b['a']	#错误用法,不能用行索引
  1. 使用布尔索引:使用的布尔索引的长度必须和行索引长度一致,此时筛选的是符合条件的行。
print(b)
#          A         B         C
#a  0.598969  0.729189  0.948198
#b  0.740842  0.081477  0.956650
#c  0.926341  0.341224  0.376946
mask=[True,False,True]
print(b[mask])
#          A         B         C
#a  0.598969  0.729189  0.948198
#c  0.926341  0.341224  0.376946
print(b[b.B>0.5])
#          A         B         C
#a  0.598969  0.729189  0.948198
  • 通过标签选择loc[]
    通过loc[]指定索引名来进行选择。
print(b)
#          A         B         C
#a  0.598969  0.729189  0.948198
#b  0.740842  0.081477  0.956650
#c  0.926341  0.341224  0.376946
print(b.loc['a'])
#A    0.598969
#B    0.729189
#C    0.948198
#Name: a, dtype: float64
print(b.loc[:,'A'])
#a    0.598969
#b    0.740842
#c    0.926341
#Name: A, dtype: float64
print(b.loc['a','A'])	# 获取单个标量值
#0.5989693588158244
print(b.loc['a':'b','A':'B'])	#注意:这里包含end行
#          A         B
#a  0.598969  0.729189
#b  0.740842  0.081477
  • 通过位置选择iloc[]
    通过iloc[]指定数值索引进行选择.
print(b)
#          A         B         C
#a  0.598969  0.729189  0.948198
#b  0.740842  0.081477  0.956650
#c  0.926341  0.341224  0.376946
print(b.iloc[0])
#A    0.598969
#B    0.729189
#C    0.948198
#Name: a, dtype: float64
print(b.iloc[:,0])
#a    0.598969
#b    0.740842
#c    0.926341
#Name: A, dtype: float64
print(b.iloc[0,0])	# 获取单个标量值
#0.5989693588158244
print(b.iloc[0:1,0:1])	#注意:这里不包含end行
#          A
#a  0.598969
  • 获取一个标量值
    可以通过at[]或iat[]来获取一个标量值,at[]输入的是索引名,iat[]输入的是数值索引。
print(b)
#          A         B         C
#a  0.598969  0.729189  0.948198
#b  0.740842  0.081477  0.956650
#c  0.926341  0.341224  0.376946
print(b.at['a','A'])
#0.5989693588158244
print(b.iat[0,0])
#0.5989693588158244

缺少值的处理

在处理数据中经常会有缺少值,这里介绍几个常用的处理缺失值的函数。

a=np.array([1,2,3,np.nan,4,5,np.nan,np.nan,np.nan]).reshape(3,3)
b=pd.DataFrame(a,index=[1,2,3],columns=list('ABC'))
print(b)
#      A    B    C
#1  1.0  2.0  3.0
#2  NaN  4.0  5.0
#3  NaN  NaN  NaN
print(b.dropna(how='all'))	#将全为np.nan的行丢弃
#     A    B    C
#1  1.0  2.0  3.0
#2  NaN  4.0  5.0
print(b.fillna(100))	#将np.nan填充为100
#       A      B      C
#1    1.0    2.0    3.0
#2  100.0    4.0    5.0
#3  100.0  100.0  100.0
print(b.isna())	#返回boolen
#       A      B      C
#1  False  False  False
#2   True  False  False
#3   True   True   True

获取数据

  • 从cvs文件获取数据
d=pd.DataFrame(np.random.random((2,2)),index=[1,2],columns=list('AB'))
#写入csv文件
d.to_csv('d.csv')
#从csv文件读取数据
e=pd.read_csv('d.csv')

这里只是总结pandas的一些基本语法,更详细的用法建议看看其他博客和文档说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值