Python中对数组修剪至少可以通过两种方式:
>>> import numpy as np
>>>
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[a>5] = 5 #方法1:通过布尔判断剔除不合要求的值
>>> a
array([0, 1, 2, 3, 4, 5, 5, 5, 5, 5])
>>> b = np.arange(10)
>>> b.clip(0,5) #方法2:通过clip(上区间,下区间),将不在区间内的值修剪掉,
#小于下区间的用下区间值代替,大于上区间的用上区间值代替
array([0, 1, 2, 3, 4, 5, 5, 5, 5, 5])
>>>
对csv数据中不符合值的删除,小搜了一下,发现大多只讲了删除已知索引或已知columns的值的删除,我想做的是如果一行中有不符合的值,则删除整行,当然,这是在数据比较大的情况下的操作,不然删除整行就容易造成数据缺失。
我采取的是这样的操作。
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
data = pd.read_csv('myData.csv')
data.describe()
#根据desceibe()统计数据,发现某一列,假设为该列column='wherecn',最大值和75%比例的值相差很大,因此
#以该列的75%值为最大值,假设为100,如果data中'wherecn'中的某个数值大于该75%值,则删该值所在的行。
data[data['wherecn'] > 100] = np.nan
cleanedData = data.dropna() #此时的cleanedData即是所要的去除了不合要求的值所在的行的数据了。
我用的是先利用bool值将不合要求的值改变为NAN,然后再利用drop.na()将其删除,用了一次转换,其实应该有直接舍弃的方法,但是目前还没get到,这是我现在能想到的最好的方法了,记录之。
需要读入中文数据时,如果乱码则可能是编码问题可以通过加入encoding解决:
data = pd.read_csv('myData.csv',encoding='gb2312')
用pandas中的DataFrame时选取行或列:
import numpy as np
import pandas as pd
from pandas import Sereis, DataFrame
data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))
data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型
data.w #选择表格中的'w'列,使用点属性,返回的是Series类型
data[['w']] #选择表格中的'w'列,返回的是DataFrame属性
data[['w','z']] #选择表格中的'w'、'z'列
data[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后
data[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
#如果采用data[1]则报错
data.ix[1] #返回第2行的另一种方法,不过与上一种方法不同的是该方法返回的是一个series
data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同
data['a':'b'] #利用index值进行切片,返回的是**前闭后闭**的DataFrame,
#即末端是包含的
数组创建函数
array 将输入数据(列表,元组,数组或其他序列类型)转换为ndarray。要么推断出dtype,要么显式指定dtype。默认直接复制输入数据
asarray 将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制
arange 类似于内置的range,但返回的是一个ndarray而不是列表
ones、ones_like 根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组
zeros、zeros_like 类似于ones和ones_like,只不过产生的是全0数组
empty、empty_like 创建新数组,只分配内存空间但不填充任何值
eye、identity 创建一个正方的N*N单位矩阵(对角线为1,其余为0)
numpy中的通用函数:
一元函数
abs fabs 计算整数,浮点数或复数的绝对值,对于非复数值,可以使用更快的fabs
sqrt 计算各元素的平方根,相当于 arr ** 0.5
square 计算各元素的平方,相当于 arr ** 2
exp 计算各元素的指数e^x
log,log10,log2,log1p 分别为自然对数(底数为e)、底数为10的log、底数为2的log,log(1+x)
sign 计算各元素的正负号:1(正数)、0(零)、-1(负数)
ceil 计算各元素的ceiling值,即大于等于该值的最小整数
floor 计算各元素的floor值,即小于该值的最大整数
rint 将各元素值四舍五入到最接近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立的数组的形式返回
isnan 返回一个表示“哪些值是NaN(这不是一个数字not a number)”的布尔型数组
isfinite/isinf 分别返回一个表示“哪些元素是有穷的(非inf非NaN)”或“哪些元素是
无穷的”的布尔型数组
cos/cosh/sin/sinh/tan/tanh 普通型和双曲型三角函数
arccos/arccosh/arcsin/arcsinh/arctan/arctanh 反三角函数
logical_not 计算各元素not x的真值,相当于-arr
二元函数
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆整除法(丢弃余数)
power 对第一个数组中的元素A,根据第二个数组中的相应元素B,计算A^B
maximum、fmax 元素级的最大值计算。fmax将忽略NaN
minimum、fmin 元素级的最小值计算。fmin将忽略NaN
mod 元素级的求模计算(除法的余数)
copysign 将第二个数组中的值得符号复制给第一个数组中的值
greater、greater_equal、less、less_equal、equal、not_equal 执行元素级的比较运算,最终产生布尔型数组、相当于缀运算符>、>=、<、<=、==、!=
logical_and、logical_or、logical_xor 执行元素级的真值逻辑运算。相当于中缀运算符&、|、^
numpy基本数组统计方法
sum 对数组中全部或某轴向的元素求和,零长度的数组的sum为0
mean 算数平均数。零长度的数组的mean为NaN
std、var 分别为标准差和方差,自由度可调,默认为n
min、max 最大值和最小值
argmin、argmax 分别为最大和最小元素的索引
cumsum 所有元素的累积和
cumprod 所有元素的累积积
数组的集合运算
unique(x) 计算x中的唯一蒜素,并返回有序结果
intersect1d(x,y) 计算x和y中的公共元素,并返回有序结果
union1d(x,y) 计算x和y的并集,并返回有序结果
in1d(x,y) 得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x,y) 集合的差,即元素在x中且不在y中
setxor1d(x,y) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素,即抑或
常见的numpy.linalg函数
diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
dot 矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的本征值和本征向量
inv 计算方阵的逆
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解(SVD)
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解
部分numpy.random函数
(numpy.random.normal(size=(4,4)))
seed 确定随机数生成器的种子
permutation 返回一个序列的随机排列或返回一个随机排列的范围
shuffle 对一个序列就地随机排列
rand 产生均匀分布的样本值
randint 从给定的上下限范围内随机选取整数
randn 产生正态分布(平均值为0,标准差为1)的样本值
binomial 产生二项分布的样本值
normal 产生正态(高斯)分布的样本值
beta 产生Beta分布的样本值
chisquare 产生卡方分布的样本值
gamma 产生Gamma分布的样本值
uniform 产生在[0,1)中均匀分布的样本值