python入门笔记:numpy和pandas的基本使用

``## python笔记:numpy的基本使用

import  numpy as np
a = np.arange(6).reshape((3,2)) #重新排列成2行5列
a.size;a.ndim;a.shape    #大小,维度,行列
a = np.linspace(1,10,20)  #生成20段等长的1-10的数列
a = np.arange(1,10,2)  #1-10 以2为步长
b=[[2,5],[4,5]]
np.dot(a,b);a.dot(b)     #矩阵相乘
c = a * b       #逐个相乘
np.sum(a,axis=1)  #axis = 1 行 等于0 列
np.argmax(a)  #索引最大值
a.mean()
np.median(a)   #中位数
np.cumsum(a)  #累乘
np.diff(a) #后一位减前一位
np.nonzero(a) #非0位置
a.T.dot(a)  #a.T 转置
np.clip(a,1,2) #小于1的转化为1 大于2的转化为2
d = np.arange(27).reshape((3,3,3))
np.max(d,axis=1)  #列
np.max(d,axis=2)  #行
np.max(d,axis=0)  #页
a[:][1]
d.flatten() #转化为一行
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])
np.vstack((A,B))  #上下合并
np.hstack((A,B))  #左右合并
A[:,np.newaxis] #行变成列
np.concatenate((A,B,B,A),axis=1)
a = np.arange(12).reshape(3,4)
np.array_split(a,3,axis=1)  #split 等分割   array_split  不等分割  axis = 1表示方向
np.vsplit(a,3)     #横向分割
np.hsplit(a,2)   #纵向分割
a = np.array([1,2,3,4],float)

numpy和scipy.status的正态分布基本使用

df['A'].mean()
df['A'].median() #中位数
df['A'].quantile(q=0.25)  #分位数
df['A'].mode() #众数
df['A'].std() #标准差
df['A'].var()  #方差
df['A'].sum() #求和
df.skew()
df['A'].skew()#偏态系数
df['A'].kurt() #峰度系数
import scipy.stats as ss
ss.norm.stats(moments='mvsk')#m均值 v方差 s偏态系数 k峰态系数
ss.norm.pdf(0) # 标准正态分布
ss.norm.ppf(0.9) #从负无穷到0.9的积分
ss.norm.ppf(0.9) #从负无穷到A累积到0.9
ss.norm.cdf(2)  #从负无穷到2的概率
ss.norm.rvs(size=10)#产生符合正态分布的值
df.sample(n = 10)#抽10个样本
df.sample(frac=0.001) #百分比抽取

pandas的基本使用

import pandas as pd
import numpy as np
s = pd.Series([1,3,6,np.nan,9,5])
dates = pd.date_range('20190806',periods =6)
df = pd.DataFrame(np.random.randn(6,4),index =dates,\
                  columns=['a','b','c','d'])   #index 行名称 colums列名称
df2 = pd.DataFrame({'名字':['a','b','c'],
                    '时间':pd.Timestamp('20190506'),
                   'A':pd.Categorical(['1','2','3']),
                    'B':[80,90,78]},index= dates)
dates = ['A','B','C']
df2.columns
df2.values
df2.describe()  #计算
df2.sort_index(axis=1,ascending=False)  #axis=1行排序,axis =0 列排序
df2.sort_values(by='A')  #指定某一列排序
df2.loc['A']    #索引A行信息
df2.iloc[2,1] #索引行列信息
df2[df2.B>70]
df2.iloc[1,2] = np.nan
df2.dropna(axis=0, how = 'any')  # how =['all','any'] 去空值
df2.fillna(value=0)  #替换nam
np.any(df2.isnull()==True)  #判断有没有空值
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
#上下数据合并  axis = 1 左右  ignore_index 忽略原来的index
res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)

df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index=[2,3,4])
res = pd.concat([df1,df2],axis=1,
                join_axes=[df1.index])  #join默认并集,inner表示交集
#join_axes 以df1.index进行添加
s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])
df1.append(s1,ignore_index=True)

pandas关于#merge合并

#merge合并
left = pd.DataFrame({'key':['K0','K1','K2','K3'],
                     'A':['A0','A1','A2','A3'],
                     'B':['B0','B1','B2','B3']})
right= pd.DataFrame({'key':['K0','K1','K2','K3'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
res = pd.merge(left,right,on = 'key')
left = pd.DataFrame({'key':['K0','K0','K1','K2'],
                     'key2':['K0','K1','K0','K1'],
                     'A':['A0','A1','A2','A3'],
                     'B':['B0','B1','B2','B3']})
right= pd.DataFrame({'key':['K0','K1','K1','K2'],
                     'key2':['K0','K0','K0','K0'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
res = pd.merge(left,right,on =['key','key2'],how='inner') #how['left','right'
 # 'inner''outer'],默认inner    indicator=False
 ##根据index连接
#res=pd.merge(left,right,left_index=True,right_on=True,how='outer')
#suffixes=['','']给两个表相同的名称不同意思加后缀

np中关于qcut和cut的区别:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':np.random.randn(12)}) #产生服从正态分布的标准数
pd.cut(df.A,5).value_counts() #等宽分箱

python入门笔记:numpy和pandas的基本使用_第1张图片
cut自动选择小于列最小值的一个数值作为下限,最大值作为上限,等分为5份
而关于qcut

pd.qcut(df.A,q=[0.1, 0.25, 0.5, 0.75, 1.]).value_counts()#q=4等频分箱 q= [0.1, 0.25, 0.5, 0.75, 1.]

python入门笔记:numpy和pandas的基本使用_第2张图片
当q取序列即[0.1, 0.25, 0.5, 0.75, 1.]则会根据百分比将其分为不同数列,而0-0.1这一范围将变为nan值
当q改为数字时,比如q=4时:
python入门笔记:numpy和pandas的基本使用_第3张图片
而关于cut函数如何实现等深分箱,可以采用分位数分箱

df.A.quantile([0,0.5,1])  #分位函数
pd.cut(df.A,bins=df.A.quantile([0,0.25,0.5,.75,1]),include_lowest=True).value_counts()  #include_lowest=True 包含最小值

python入门笔记:numpy和pandas的基本使用_第4张图片
根据分位函数既可以完成等深分箱的操作
其中,等深分箱即:箱子中样本量一致
等宽分箱即:箱子中取值范围一致

你可能感兴趣的:(python)