1.1 python基础
一、python 基础
其他链接
1、第三方库 NumPy - 矩阵运算
(1) ndarray对象
- 创建数组
import numpy as np a=np.array([[1,2,3],[4,5,6],[7,8,9]]) pirnt(a.shape) #获得数组大小 (3,3) 3行3列 print(a.dtype) #数据类型 - 结构数组
import numpy as np
persontype=bp.dtype({
'names':['name','age','math'],
'formats':['S32','i','f']
})
peoples=np.array([
('name1',20,80.3),('name2',22,89.5)],dtype=persontype)
print(np.mean(ages))
print(peoples[:]['chinese'])
-----------------------
#定义数据类型
np.dtype({'names':[],'formats';[])
#定义结构数组
np.array([(),(),()],dtype=nptype)
#计算 某个字段平均值
np.mean(names_1)
(2) ufunc 运算
- 连续数组的创建
#等差数组 x1=np.arange(1,11,2) #初始值,终值,步长 x2=np.linspace(1,9,5) #初始值,终值,元素个数 - 数组间的算数运算
x1 = np.arange(1,11,2) x2 = np.linspace(1,9,5) print np.add(x1, x2) #加 print np.subtract(x1, x2) #减 print np.multiply(x1, x2) #乘 print np.divide(x1, x2) #除 print np.power(x1, x2) #次方 print np.remainder(x1, x2) #取余 print np.mod(x1, x2) #取余 - 统计函数
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print np.amin(a) # [1]
print np.amin(a,0) # axis = 0 轴的最小值 [1,2,3]
print np.amin(a,1) # axis = 1 轴的最小值 [1,4,7]
print np.amax(a) # 最大值
print np.ptp(a) #最大值和最小值之差
print np.percentile(a, 50) # 百分位数?50是中位数?
print np.median(a) # 中位数
print np.mean(a) # 平均数
b=np.array([1,2,3,4])
wts = np.array([1,2,2,1]) #权重
print np.average(a,weights=wts) # 加权平均值
np.std(a) #标准差
bp.var(a) # 方差
# 排序
a = np.array([[4,3,2],[2,4,1]])
print np.sort(a) # 默认:axis=-1 最后一个轴 [[2 3 4][1 2 4]]
print np.sort(a, axis=None) # 扁平化 [1 2 2 3 4 4]
print np.sort(a, axis=0) # 第一个轴 排序
print np.sort(a, axis=1) # 第二个轴 排序
2、第三方库 Pandas
Pandas 可以对数据进行导入、清洗、处理、统计和输出。
(1) Series 字典序列
两个基本属性,index 和 values
index 默认是0,1,2,.. 也可以自己指定索引
- 创建Series
#两种方式创建
#---------------
from pandas import Series, DataFrame
x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
#---------------
d = {'a':1, 'b':2, 'c':3, 'd':4}
x3 = Series(d)
print x3
#---------------
(2) DataFrame 类似数据库表
index 和 columns
DataFrame 看成是有相同索引的Series组成的字典类型
- 创建
from pandas import Series,DataFrame
data={'Chinese':[66,95,93,23,54],'English':[65,34,64,87,36],'Math':[45,25,86,76,34]}
df1=DataFrame(data)
df2=DataFrame(data,index=['vhfw','gryu','vcyy','hlvs',dmww',columns=['English','Math','Chinese'])
print df1 # 未指定索引,默认 0,1,2,...
print df2 # 指定索引
----------
# df2结果
English Math Chinese
ZhangFei 65 30 66
GuanYu 85 98 95
ZhaoYun 92 96 93
HuangZhong 88 77 90
DianWei 90 90 80
- 导入与输出( csv || xlsx ==> xlsx)
pip install xlrd
pip install openpyxl
python >>>
import pandas as pd
score = DataFrame(pd.read_excel('datt_in.xlsx')) #导入
score.to_excel('data_out.xlsx') #输出
print score #打印
-------------------
#安装依赖包
pip install xlrd
pip install openpyxl
(3) 数据清洗(DataFrame操作)
- 删除(去异常)
- 无关的行(列)
- 错误的行(列)
dataFrame.drop(columns=['colName'])dataFrame.drop(index=['rowName'])
- 重复的行(列)
dataFrame.drop_duplicates()
- 重命名列名(易读)
dataFrame.rename(columns={'colName1':'rename1','English':'rename'},inplace=True)
- 格式化 (去异常+易读?)
- 更改数据格式
dataFrame['colName1'].astype('str') .astype(np.int64)
- 删除数据间的空格、特殊符号$
dataFrame['colName1']=dataFrame['colName1'].map(str.strip) lstrip rstripdataFrame['colName1']=dataFrame['colName1'].str.strip('$')
- 大小写转换
dataFrame.columns=dataFrame.columns.str.upper()大写:upper() 小写:lower() 首字母大小:str.title()df.[colname1] 对列的值 || dr.columns 对列名操作
- 查找空值
dataFrame.isnull()
dataFrame.isnull().any()哪列存在空值
- 更改数据格式
- 辅助函数 apply(func)
- 传入内置函数,例如大小写转换
dataFrame['colName1']=dataFrame['colName1'].apply(str.upper)
- 传入自定义函数,例如新增一个列,通过两个列计算得到的值
-
def plus(df,n): df["new1"]=(df['col1']+df['col2'])*m return df dataFrame=dataFrame.apply(plus,axis=1,args=(2)) --------------------- plus是函数名,axis=1|0 代表是 行|列 操作,args是传递的参数。 dataFrame.apply 第一个传入的参数是 dataFrame dataFrame[colName1].apply 第一个传入的参数是 dataFrame[colName1]
-
- 传入内置函数,例如大小写转换
(4) 数据统计(函数)
| 函数 | 作用 |
|---|---|
| count() | 统计个数(空值NaN不计入) |
| min() | 最小值 |
| max() | 最大值 |
| sum() | 总和 |
| mean() | 平均值 |
| median() | 中位数 |
| var() | 方差 |
| std() | 标准差 |
| argmin() | 统计最小值的索引位置 |
| argmax() | 统计最大值的所有位置 |
| idxmin() | 统计最小值的索引值 |
| idxmax() | 统计最大值的索引值 |
| describe() | 一次性输出多个统计指标 (count,mean,std,min,max等) |
(5)数据表合并
当我们有多个渠道源的数据表时,需要进行合并
# 数据表1,数据表2 进行合并操作
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})
- 基于指定列
df3=pd.merge(df1,df2,on='name') ------ #基于列 name 进行合并,当df1['name']和df2['name'] 的字段值相同时合并
- inner 内连接(merge 默认 内连接)
df3=pd.merge(df1,df2,how='inner') --------- #基于相同的键(name)做连接,结果同 基于列 name 连接 - left 左连接 | right 右连接
df3 = pd.merge(df1, df2, how='left') df3 = pd.merge(df1, df2, how='right') ------ left 以第一个 DataFrame 为主进行的连接 right 以第二个 DataFrame 为主进行的连接
- outer 外连接 (取并集)
df3 = pd.merge(df1, df2, how='outer')
pandasql:使用SLQ方式打开Pandas
使用SQL语句对DataFrame操作
两个参数:SQL查询语句,环境变量( globals()或locals() )
```
import pandas as pd
from pandas import DataFrame
from pandasql import sqldf, load_meat, load_births
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
pysqldf = lambda sql: sqldf(sql, globals())
sql = "select * from df1 where name ='ZhangFei'"
print pysqldf(sql)
```

浙公网安备 33010602011771号