numpy和pandas的基础用法

numpy

numpy创建array

import numpy as np
a = np.array([[1,2,3],
              [2,3,4]],dtype = np.int32)   #不加32默认是64位的,这一句是在给矩阵内部的元素进行定义
print(a.dtype)


#生成全部为0元素的矩阵,参数为所希a望的shape
a = np.zeros((12,3))
print(a)
#生成全部为1的矩阵,参数为所希望矩阵的shape
a = np.ones((3,4))
print(a)
#生成一个全部为空的矩阵容器
b = np.empty((3,4))
print(b)
#生成随机数,并且可以按照长度整合
a = np.arange(12).reshape((3,4))
print(a)
#生成一个从1开始,到10结束(都包含在里面)中间划分20段,生成的是一个可迭代数列
a = np.linspace(1,10,6).reshape((2,3))
print(a)
for i in a:
    print(i)

numpy的属性

import numpy as np
array = np.array([[1,2,3],
         [2,3,4]])
print(array)
print('number of dim(几维):',array.ndim)
print('number of shape(行和列):',array.shape)   #如果是一个一维的数组,其中有三个元素那个就是(3,)
print('number of size(元素个数):',array.size)

运行结果:
在这里插入图片描述

numpy的基础运算

import numpy as np

a = np.array([[1,2],
              [3,4]])
b = np.arange(4).reshape(2,2)
print(a)
print(b)

#两种不同的乘法
c = a*b   #按照位置相乘
c_dot = np.dot(a,b)     #按照矩阵运算相乘
print(c)
print(c_dot)


c = np.random.random((2,4))    #随机生成2行4列的矩阵,矩阵元素的值不超过1
print(c)
print(np.sum(c))     #求矩阵所有元素的和
print(np.min(c))     #求矩阵所有元素中的最小值
print(np.max(c))     #求矩阵中所有元素的最大值




d = np.arange(2,14).reshape((3,4))
print(d)
print(np.argmin(d))      #矩阵中最小元素的索引
print(np.argmax(d))      #矩阵中最大元素的索引

print(np.mean(d))        #求矩阵的平均值
print(np.mean(d,axis = 0))    #axis参数等于0则是对列取平均,axis参数等于1则是对行取平均


print(np.cumsum(d))      #前几个数之和
print(np.diff(d))        #两数之差

print(np.nonzero(d))     #输出的是不是数字零的行和列
print(np.sort(d))        #矩阵逐行排序

print(np.transpose(d))   #矩阵的转置
print(d.T)               #矩阵的转置
print((d.T).dot(d))      #矩阵的转置乘以本身

print(np.clip(d,4,9))    #将d矩阵中小于4的变为4大于9的变为9,中间的保持不变

numpy的索引

import numpy as np
A = np.arange(3,15).reshape((3,4))
print(A)
print(A[2][1])      #行和列的索引都是从0开始索引
print(A[1,1:4])     #第二行第二个数到第4个数
for row in A:
    print(row)      # 迭代出行
for colum in A.T:
    print(colum)    #迭代出列

print(A.flatten())  #列表显示矩阵的所有值

numpy的合并

import numpy as np
A = np.array([1,1,1])[:,np.newaxis]     #改变了维度
print(A)
B = np.array([2,2,2])[:,np.newaxis]
print(np.vstack((A,B)))   #将A和B上下合并
print(np.hstack((A,B)))   #将A和B左右合并
print(np.hstack((A,B)).shape)
print(np.concatenate((A,B,A,B), axis = 1))  #axis为0上下合并,axis为1左右合并

numpy的分割

import numpy as np
a = np.arange(12).reshape((3,4))
print(a)
print(np.split(a,2,axis = 1))        #对a矩阵在行上面把矩阵分割成两列
print(np.split(a,3,axis = 0))        #对a矩阵在列上面把矩阵分割成三行
print(np.vsplit(a,3))                #横向分割
print(np.hsplit(a,4))                #纵向分割

numpy的copy和deepcopy

import numpy as np
a = np.arange(12).reshape((3,4))
print(a)
print(np.split(a,2,axis = 1))        #对a矩阵在行上面把矩阵分割成两列
print(np.split(a,3,axis = 0))        #对a矩阵在列上面把矩阵分割成三行
print(np.vsplit(a,3))                #横向分割
print(np.hsplit(a,4))                #纵向分割

pandas

pandas的基本介绍

import pandas as pd
import numpy as np
s = pd.Series([1,2,3,np.nan,44,1])
print(s)
dates = pd.date_range('20160101',periods=4)
print(dates)
df1 = pd.DataFrame(np.arange(12).reshape((3,4)),index = ["a",'b','c'],columns = dates)   #pd.DataFrame(矩阵,每一行的索引值,每一列的索引值)
print(df1)
df2 = pd.DataFrame(np.arange(12).reshape(3,4))
print(df2)        #默认就是0,1,2,3,4作为行和列的序号

df3 = pd.DataFrame(
    {'A':1.0,
     'B':pd.Timestamp('20200525'),
     'C':pd.Series(1,index=list(range(4)),dtype='float32'),
     'D':np.array([3]*4,dtype='int32'),
     'E':pd.Categorical(['test','train','test','train']),
     'F':'foo'
     }
)
print(df3)
print(df3.dtypes)       #打印每一列的数据类型
print(df3.describe())



df3.sort_values(by = 'E')
print(df3)

pandas选择数据

import numpy as np
import pandas as pd
dates = pd.date_range('20200121',periods=6)
df = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df)
print(df['A'])
print(df.A)          #按照索引名称提取行和列

print(df[0:3])       #按照行切片选择数据

print(df.loc['20200121'],['A'])          #根据行和列名称来选取数据


print(df.iloc[[1,2,3],1:3])              #挑选出固定行和相对列的数据


#print(df.ix[:3,['A']])       #1.0.0版本之后移除了这个ix函数

#是或者否的一个判断
print(df[df.A>8])              #只对比A但是,满足条件的A所在的行都会被留下(布尔型索引)

pandas设置值

import numpy as np
import pandas as pd
dates = pd.date_range('19960121',periods=6)
print(dates)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index = dates,columns = ['A','B','C','D'])
print(df)
df.iloc[3,3] = 123               #利用iloc定位并修改
print(df)
df.loc['19960124','A'] = 46      #利用loc具体的索引值来定位
print(df)
df.B[df.A>0] = 0                 #筛选数字并修改
print(df)

pandas处理丢失数据

import numpy as np
import pandas as pd
dates = pd.date_range('19960121',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df.iloc[0,1] = np.nan

print(df)
print(df.dropna(axis = 0,how = 'any'))    #axis = 0表示删除行,axis = 1表示删除列,how = {'any','all'},any就是行里只要出现nan就删除,all就是必须所有的都是nan才删除
print(df.fillna(value=0))        #填充内容为nan的单元
print(np.any(df.isnull()))      #判断是否有nan

df = pd.read_excel('/Users/jerry/Desktop/DEMO.xls')         #可以直接获取到表格的所有数据
print(df)

pandas的合并

import numpy as np
import pandas as pd
df = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df1 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
print(df)
print(df1)
print(df2)
res = pd.concat([df,df1,df2],axis=0,ignore_index=True)    #axis = 0竖向合并,
print(res)
df3 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index = [1,2,3])
df4 = pd.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index = [2,3,4])
print(df3)
print(df4)
res1 = pd.concat([df3,df4],join='outer')    #默认情况就是outer,按照列索引拼凑到一起然后多多余的就用nan
res2 = pd.concat([df3,df4],join='inner')    #将不重合的部分给剪掉
print(res1)
print(res2)

df5 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df6 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df7 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
res = df5.append([df6,df7],ignore_index=True)         #类似于表格,在一个DataFrame下继续添加
print(res)

pandas用plot绘图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.Series(np.random.randn(1000),index=np.arange(1000))
data = data.cumsum()
data.plot()
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值