01 basic of numpy & pandas

         after about a week to learn this, I feel it's difficult to remember so many methods in numpy and pandas. the matrix, axis, functions and so on. so I figure out some tips to help me keep a deep memory to my head.  like the music <Zombie>, in your head, in your head......  aha~  

 

总结下,numpy适合进行很多数据的运算,就是矩阵之间的折腾,一下子转置,一下子积分等,速度很快,底层用C写的,但是要求数据比较整洁,没有脏数据。 

pandas就是多张二维表,有索引index,columns代表各个表,它的重点在与对数据的预处理,对轴上的数据排序,丢弃过滤,计算,类型转化,也有运算,猜测和numpy比起来肯定效率低得多,可以使用很多函数来进行自定义处理数据,感觉适合提取数据,不适合运算。

 

pandas的基本操作: 

Series 一维的 可以看做是一张表    有index和values的属性

obj2 = pd.Series([4,7,-5,3], index=['a','b','c','d'])
print(obj2)
print(obj2[obj2>0])   # 过滤掉一些数据  
print('b' in obj2)    # cf: 这种写法只针对索引 index  而不针对values

DataFrame: 可以看做是多张表的集合   有index和columns的属性

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year':[2000, 2001, 2002, 2001, 2002, 2003],
        'pop':[1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame=pd.DataFrame(data)
frame      # 在jupyter notebook 上显示甚是好看   如果是frame.head  会取前5个显示

取一行或者取一列的操作靠 

frame2.loc['three']   # 取一行 
del frame2['eastern']    # 不能用 frame.eastern 这样的    综上所述  还是用传统比较好 
# 选择行和列的子集的工具   轴标签loc  整数索引 iloc      loc传进去的是字符串  而iloc是整数   难怪有个i 代表int
data.loc['California', ['two','three']]   # 第一个参数是索引名称  第二个是表名 
data.iloc[2,[3,0,1]]         # 第一个参数是索引序列  第二个是表的序列 
data.loc[['California','Ohio'], ['two','three']] 

还可以通过切片来进行操作

data[['two','one']]
data[:2]   # 这里比较奇怪  不以表名做筛选条件  而是列 其实想想也对  在数据库中  表是没有先后顺序的  
           # 那么传进去是表名  是整数或者整数数组就是表名
data[data['three']>5]  # 通过列进行筛选   得到行
data[data<5]=0

所以需要找到一种最高效,最常用的取值方法,后面看人家代码怎么写的

然后就是一些常规的操作了

data.drop(['one', 'two'], axis='columns')  # axis中的  1=columns   那么行呢  0=?  
data.drop(['California', 'Ohio'],axis='index')    # 当然是 0=index 属性名称  对应起来的   
df1.add(df2, fill_value=0)   # 这样就有了默认值 fill_value=0   但是不知道其他操作都有没有默认值
df1.reindex(columns=df2.columns, fill_value=0)  # 在重新索引时也可以指定一个填充值
np.abs(frame)   # 还可以这样操作  用numpy操作pandas对象

自定义函数,对数据进行转化和清洗

f = lambda x: x.max() - x.min()
frame.apply(f,axis='index')  # columns
def f(x):
    return pd.Series([x.min(), x.max()], index=['min', 'max']) # 自己写不出来  但是看得懂系列   需要练习
frame.apply(f)

formats = lambda x: '%.2f' % x   # 把原本6位小数转化成2位 
print(frame)
print(frame.applymap(formats))  

对数据进行排序

frame.sort_index(axis=0, ascending=True)  # 0 代表对列排列  1 代表对行排列   ascending代表是否降序
frame.sort_values(by=['a','b'], ascending=True) 

# 好玩的排列方式   rank()   method='first', 'max'...
obj = pd.Series([7,-5,7,4,2,0,4])
obj.rank()  # 例如俩个7是6和7位,取平均值
obj.rank(method='first')  # 这就是正常的操作  
obj.rank(method='max', ascending=True) # 取后面的  往后
frame.rank(axis='columns')   # 按照行来操作

很多种组合玩法,在这里我觉得需要了解下pandas的设计思想了,太灵活了,太方便了。

以及一些分析数据前的操作,统计,计数,值的判断

# 带有重复标签的轴索引
obj = pd.Series(range(5), index=['a','a','b','b','c'])
print(obj.index.is_unique)   # 是否唯一
df.sum(axis=1, skipna=False)  # 如果skipna=False 那么遇到NaN都会变成NaN
df.idxmax(axis=0)  # 默认是以表来排的
df.describe() 

还有其他的玩法,但是目前我只要求掌握这么多就够了,能看懂,但是并不能写。  

 


 

numpy的基本操作:

data = np.random.randn(2, 3)
data = data * 10
data = data + data
data.shape  // 行列 数
data.dtype  // 数据类型
data.ndim  //行数
arr0=np.zeros((2,4))
arr1=np.ones((2,4))
arrempty=np.empty((2,3))
arr1=np.array([1,2,3], dtype=np.float64)
arr2=np.array([1,2,3], dtype=np.int32)

arr2d = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(arr2d[:2])
print(arr2d[:2, 1:])

arr = np.arange(32).reshape((8,4))
print(arr[[1,5,7,2]][:, [0,3,1,2]])  # 花式索引

arr = np.arange(16).reshape((2, 2, 4))
print(arr.transpose(1,0,2))   # 三个维度  第一个维度和第二个维度转换  第三个不变 

arr = np.arange(10)
print(np.sqrt(arr))  #开根号
print(np.exp(arr))  # 
x = np.random.randn(8)
y = np.random.randn(8)
print(np.maximum(x,y))  # 相加  基础函数

arr = np.random.randn(7) * 5
print(arr)
remainder, whole_part = np.modf(arr)
print(remainder)    # 小数部分
print(whole_part)   # 整数部分

arr = np.random.randn(5, 4)
print(arr.mean())
print(arr.mean(axis=0)) #计算以列为轴的平均值
print(arr.sum())
print(arr.sum(axis=1)) # 计算以行为轴的总和

samples = np.random.normal(size=(4, 4))  # 一个标准正态分布的4×4样本

关于随机漫步理论在另一篇博客有过了解,后面再结合其他学科深入学习。

 

jupyter notebook:

pandas :  https://github.com/zeroonechange/python/blob/master/data_analysis/pandas_test.ipynb 

numpy:   https://github.com/zeroonechange/python/blob/master/data_analysis/numpy_test.ipynb

posted @ 2018-04-12 00:00  zeroonec  阅读(189)  评论(0编辑  收藏  举报