Loading

1.1 python基础

一、python 基础

其他链接

像Excel一样使用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 rstrip
      • dataFrame['colName1']=dataFrame['colName1'].str.strip('$')
    • 大小写转换
      • dataFrame.columns=dataFrame.columns.str.upper()
      • 大写:upper() 小写:lower() 首字母大小:str.title()
      • df.[colname1] 对列的值 || dr.columns 对列名操作
    • 查找空值
      • dataFrame.isnull()
        img
      • dataFrame.isnull().any() 哪列存在空值
        img
  • 辅助函数 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'] 的字段值相同时合并
    
    img
  • 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 为主进行的连接
    
    img](https://tva3.sinaimg.cn/thumbnail/005zbIM7ly1g10zccuvprj306p054jrp.jpg)![img
  • outer 外连接 (取并集)
    df3 = pd.merge(df1, df2, how='outer')
    
    img
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)
```
posted @ 2025-03-12 22:28  一起滚月球  阅读(8)  评论(0)    收藏  举报