numpy和pandas是Python进行数据分析的非常简洁方便的工具,话不多说,下面先简单介绍一些关于他们入门的一些知识。下面我尽量通过一些简单的代码来解释一下他们该怎么使用。以下内容并不是系统的知识体系,我只是尽可能把最基础的知识点列写一下。
一、numpy
1、array
import numpy
list_1 = [1,2,3,4]
array_1 = numpy.array(list_1) # 一维数组
list_2 = [4,5,6,7]
array_2 = numpy.array([list_1,list_2]) # 二维数组1 array_2.shape # 查看数组特征,eg:2行4列
array_2.size # 查看元素个数, eg:8
array_2.dtype # 查看数组类型,eg:int64
注:numpy.arange(n) #与python中的range区别是前面有个a
numpy.zeros(s) # 全0矩阵,s可以为一个数也可以为一个列表,eg:[2,3]表示2*3的二维数组
numpy.eye(a) # 单位矩阵,生成的是浮点数
访问数组中元素:
一维:array_1[2] 、array_1[1:4]
二维:array_2[1][2] 、array_2[1,2] 、array_2[:1,1:4]
其中可以根据python中列表的切片来访问数据
2、数组与矩阵运算
~~数组array
numpy.random.randn(10) # 十个元素的一维数组
numpy.random.randint(10,size=20).reshape(4,5) # 产生20个10以内的随机整数,后面的reshape是将这些数重新写成一个4*5的二维数组
数组之间维度相同可以直接进行加减乘除(除数不能为0)
numpy.unique(array_1) # 找到里面所有的数但不重复
sum:二维数组中对每一列求和 sum(array_2)
sum(array_2[0) 对第一行求和
sum(array_2[:,0] 对第一列求和
array_2.max() #求最大值,对某行某列求则同sum
~~矩阵matric
numpy.mat([1,2,3],[4,5,6]) # 生成一个二维矩阵
numpy.mat(array_1) # 将数组转换成矩阵
注:矩阵之间维度相同可以直接进行加减运算,而乘除运算需要行和列交叉对应,参照线性代数中的知识。
3、input和output:import numpy as np
f = open('x.pkl','wb')
#序列化到硬盘
#pickle
import pickle
pickle.dump(x,f) # 产生pkl文件
pickle.load(f) # 提取pkl文件
#numpy本身的工具
numpy.save('one_array',x)
numpy.load('one_array.npy')
numpy.savez('two_array.npz',a=x,b=y) # 对多个进行操作,进行压缩储存
c = numpy.load('two_array.npz') # 提取文件
c['a'] #第一个文件
c['b'] #第二个文件
import numpy as np
import pandas as pd
#下面是创建Series的三种方法
#方法1:s1 = pd.Series([1,2,3,4])
#方法2:s2 = pd.Series(np.arange(10)) # 通过numpy.arange创建
#方法3:s3 = pd.Series({'1':1,'2':2,'3':3}) # 通过字典创建
s1.values # 查看值
s1.index # 查看索引
s4 = pa.Series([1,2,3,4],index=['A','B','C','D']) # 设置索引
s4.to_dict() # 转化成字典
pd.isnull(s4) #判断其中元素是否为NaN,pd.notnull()同理
from pandas import Series,DataFrame
#通过粘贴板导入dataframe
df = pd.read_clipboard() # 在此之前需要你copy一个表
df.columns # 输出列名
df.'列名' # 输出列的数值(是一个Series)
df_new = DataFrame(df,columns=['列名1','列名2'])
s1 = pd.Series(df['列名']) # 输出这一列,dataframe的每一列是一个series
s1.index\values 即对series操作,或者通过s1['索引值']
df1.iterrows() #返回一个生成器,可以用for循环来访问
eg: for row in df1.iterrows():
print(row) #返回的数据为一个tuple
s1,s2,s3为3个Series,用其组成一个人dataframe:
df_new = pd.DataFrame([s1,s2,s3],index=['A','B','C'])
# index是每个Series的名称
# 初始是按横向拼接成的dataframe
df1 = df1.T #转置,转置之后就和直接用dataframe生成的一样了
三、IO操作: 1、从粘贴板读取df1 = pd.read_clipboard()
df1.to_clipboard() # 写入粘贴板
df1.to_csv('名字.csv',index=False) # false则表示不添加索引号
df2 = pd.read_csv('df1.csv') # 读取CSV文件
df1.to_json() # 转化成json文件
pd.read_json(df1.to_json()) # 读取json文件
df1.to_html('df1_html') # 转换成HTML文件
5、exceldf1.to_excel('df1.xlsx') # 生成Excel文件
四、Selecting and Indexingdf.head() # 返回前五行
df.tail() # 返回后五行
# 返回更多的内容则在括号中写出来,不写则默认为五行
df.iloc[:,:] #索引切片,定位,基于index,与索引名无关
df.loc[:,:] # 根据索引名来,label来过滤
s1.reindex(index=['A','B','C','D','E'],fill_value=10)
# fill_value 是指当重新写的index中有原来没有的,那么他本身输出为NaN,fill值为添加到这个索引下的值
# 创建一个新Series,另一种赋值的方法
s2 = Series(['A','B','C','D'],index=[1,5,10])
s2.reindex(index=range(15)) # 生成15个索引的Series,除了原有的其他的都是NaN
s2.reindex(index=range(15),method='ffill') # 在上一步的基础上,按顺序将上一个value填充到他下面的几个中(forward fill)
s1.drop('A') # 表示删除A的内容