欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PYTHON数据分析

程序员文章站 2022-10-19 12:42:18
一、NUMPY1.创建ndarrayimport numpy as npimport numpy as np #导入numpya1=np.array([1,2,10,4]) #利用列表构建一维数组, array里得是同一数据类型,可以是列表,元组,数组或其他序列a2=np.array([[1,2,3,4],[4,15,6,17]])#利用列表构建二维数组,可以理解为矩阵a3=np.zeros(10) / zeros_likea4=np.ones(5) / ones_likea5=np...

一、NUMPY

1.创建ndarray

import numpy as np
import numpy as np #导入numpy
a1=np.array([1,2,10,4]) #利用列表构建一维数组, array里得是同一数据类型,可以是列表,元组,数组或其他序列
a2=np.array([[1,2,3,4],[4,15,6,17]])#利用列表构建二维数组,可以理解为矩阵
a3=np.zeros(10)  / zeros_like
a4=np.ones(5)   /  ones_like
a5=np.empty((2,2,3))
a6=np.arange(10)
a7 = np.eye(6)

2.数据类型

hot=np.dtype([('name',np.str_,10),('number',np.int64),('price',np.float64)])
print(hot)
a8= np.array([1,2,3],dtype=np.float64)
a9=a8.astype(np.int64) #转换数据类型

3.数据读入

import numpy as np
raw_DATA =
raw_data = np.loadtxt('coupon_nm_new.csv',delimiter=",",dtype=hot)

4.索引和切片

#索引第3家店铺
shop[2]
#索引第3家到第5家店铺
shop[2:6]
#赋值操作
shop[2:5]=6
#多维数组索引
arr=np.array([raw_data['团购活动ID'],raw_data['团购名'],raw_data['购买人数']])
#数组索引
arrt[0,0:3]
#通过布尔值进行索引(赋值的运算会产生布尔型数组)
raw_data[raw_data['购买人数']==50]
raw_data[(raw_data['购买人数']=50)|(raw_data['团购名']!='a')]  &() |()  andor无效
#当把值赋值给一个切片时,该值会传播到整个选区
a1 = np.array([0,1,2,3,4,5,6,7,8,9])
a2 = a1[5:8]
a2[0] =999 然后a1[5]会变成999

5.数组转置和轴对换

PYTHON数据分析

6.统计分析及函数

#用numpy进行统计分析 sum mean std  var min max
price=raw_data['团购价']
price.sort()
print('排序后团购价为:',price)
np.sum(price)
np.mean(price)
np.var(price)
np.max(price)
np.min(price)

#其他函数
np.sqrt(price)
np.square(price)
np.exp(price)
np.randn(8) #反回标准正态分布的随机数
np.maximum(数组一,数组二)

7.唯一化

PYTHON数据分析

二、Pandas

1.Series

PYTHON数据分析

2.DataFrame

PYTHON数据分析

3.读取文件

raw_data = pd.read_excel('文件名')
raw_data2 = pd.read_csv('文件名') #文件放在pycharmproject里
raw_data3 = pd.read_excel(r'F://````地址')

4.索引和切片

# 筛选某一列的值,返回符合条件的所有行
 df1[df1[column1] == value1]

 # 筛选某一列的值,返回符合条件的某一列
 df1[column2][df1[column1] == value1]

 # 筛选多列的值,返回符合条件的所有行
 df1[df1[column1] == value1][df1[column2] == value2][...]

# 筛选多列的值,返回符合该条件的多列
df1[[column1, column2]][df1[column1] == value1][...]

raw_data.iloc[1,:] = raw_data.iloc[0,:]# 第一行赋值给第二行

#Series.iloc[第几行][第几列]

# 或raw_data.loc[第几行,列名]

#其中第几行不用数字,用值的话,需要先  raw_data.set_index('Team') 再 raw_data.loc[['TeamA’,'TeamB'],列名]


选择其中一列元素 raw_data[column1]
    选择两列元素 raw_data[[column1,column2]] 
    选择评分大于3.5的商家所有信息 raw_data[raw_data['评分']>3.5]
    打印所有列名 raw_data.columns
    得到每一行的所有值raw_data.values
    人均这列所有元素+100  raw_data['人均']+100
    按人均排序,从小到大 raw_data.sort_values(['人均'],ascending=true)
    按index排序 raw_data.sort_index()

5.排序和排名

对索引值进行排序

a.sort_index()#默认升序
a.sort_values(by=[‘a’,''b],axis=0,ascending=[False,True])#先按a列降序,再按b列升序

6.描述统计

raw_data.describe()  #生成描述统计
raw_data.idxmax(最大值的索引)#最大值的索引
raw_data.max()
quantile\sum\mean\median\mad\var\std\cumsum
corr\cov\count

7.唯一值、缺失值

唯一值
显示具体的唯一值

df['col'].unique()

显示列唯一值个数

df['col'].nunique()

缺失值

a.unique()
is_null_data = raw_data[raw_data['评价数'].isnull() == True]
raw_data5 =raw_data[raw_data['评价数'].isnull() == False] #去掉缺失值后的数据

8.清洗数据

1.移除重复值

df.duplicated()#返回布尔型Series 表示各行是否有重复行
df.drop_duplicates() #返回移除了重复行后的数据
filter_words = ['人均:','人均','大概','左右','差不多']
for  i in range(len(raw_data)):
    value = raw_data['人均'].iloc[i]
    if type(value) is int or type(value) is float:
        continue
    for word in filter_words:
        if word in value:
            raw_data.loc[i,'人均'] = raw_data.loc[i,'人均'].replace(word,'')
print(raw_data.head())


#apply() 可以随意调用任何函数
def clean_price(x):
     filter_words = ['人均:', '人均', '大概', '左右', '差不多']
     if type(x) is int or type(x) is float:
         return x
     for word in filter_words:
        if word in value:
            x = x.replace(word, '')
     return x

9.聚类

def cate_shops(x):
    if x <=2:
        return 0
    if x > 2 and x <= 3.5 :
        return 1
    if x > 3.5:
        return 2
raw_data['商家等级'] = raw_data['评分'].apply(cate_shops)
cata =raw_data.groupby(by=['商家等级']).agg({'人均':'mean'})  #根据商家等级列合在一起 再用agg相加
print(cata)

10.数据表连接

pd.concat([df1,df2,df3]) #数据拼接
pd.merge(left,right,on='key') #主键相同进行内连接
pd.merge(left,right,on=['key1','key2']) #多个主键内连接
pd.merge(left,right,how='left',on=['key1','key2']) #多个主键 左连接
#两个表列名不同时,left_on='a',right_on='b'

常用操作

  • 查看数据属性
df.columns #查看有哪些列
df.index #查看索引
df.dtypes #查看每列的数据类型
df.info()#查看各列数据的数据类型
df.shape #查看行列的大小
df.size #查看有多少单元格
len(df)#查看行数
  • 常用方法
df.head() 返回前几行
df.tail() 返回倒数几行
df.rename(columns={'height':'Height'},inplace=True) 修改列名
df['animal'].replace('snake','python') 指定数据替换
df.collage.value_counts() 查看列为collage中元素的计数
df.sort_values(by=['Height','Weight']) 依据指定列进行排序,默认升序
df.sort_values(by=['b','a'],axis=0,ascending=[False,True]) 先对b列降序,后对a列升序
df.describe() 查看描述性统计的相关信息
max\min\sum\mean 不知道轴axis时 默认对列运算
df['visits'].sum() 对指定列求和
  • 轴的使用
    axis:
    0值表示沿着某一列或行标签\索引值
    向下执行方法
    1值表示沿着某一行或列标签横向执行对应的方法
  • 增加删除列的操作
df['class1'] = 1 #增加列,每次只能增加一列
df.loc['k'] = [3,'cat','no',6] #增加行名为k的一行数据
del df['class1'] #删除class1列
df.drop(labels='k',inplace=True) #删除增加的名为k行数据
df = df.drop('k')
  • 缺失值和文本字符串的处理
    • 缺失值
pd.isnull(df) 返回所有数据的检测结果
pd.isnull(df['a']) 对某列数据进行检测
pd.dropna(axis=0,how='any',thresh=None,inplace=False)
# any:如果存在任何NA值,则放弃该标签
# all:如果存在的值为NA值,才放弃该标签
# thresh=n 保留至少n个非NaN数据
# inplace:筛选过缺失值的新数据是保存副本还是直接在原数据上修改
df.fillnal(value=0)0填充缺失值
len(df.loc[(df['a'].isnull(),'a')]) 查看某列缺失值的个数
  • 文本数据(字符串处理)
s =pd.Series(['A','B','C','Abba','CABA'])
s.str.strip() 去除首位空格

s.str.upper() 转为小写
s[s.str.strip().str.endswith('a')] 选取以a为结尾的数据
df['player'].str.spilt('') 对指定列数据进行分割
df['player'].str.spilt('',expand=True) 使用expand方法,将分割出的数据单独生成一列
sd['player'].str[:3] 使用[]对字符串进行切片提取

文本字符串在处理前,要先转为字符(.str)在进行处理
  • 设置索引和索引提取数据(loc、iloc)
  1. set_index()设置多重索引
new_df = df.set_index(keys=['a','b'],append=False,drop = false)
append 是否将原索引保存
drop是否保存转换为索引的列数据
  1. sort_index 将索引进行排序
new_df.sort_index(na_position=‘last’,inplace=True)
na_position='last'指将缺失值放在最后进行显示
  1. 切片(slicers)对多重索引操作
    slice表达的是范围,有几重索引就写几个条件,用冒号代表去全部的列
    第一重索引取值范围0-1000
    第二重索引取值为给定值
    第三重索引没给限定条件
new_df.loc[(slice(0,1000),['a','b'],slice(None)),:]
  1. reset_index还原索引
new_df.reset_index(drop=True

iloc是按照位置索引,loc是按照名称索引

  • 数据的查询、修改、分组计算

1.查询

df[ (df['a']>=2000) | (df['a']<=1700)] #条件为或
df[ (df['a']>=2000) & (df['a']<=1700)] #条件为和
df.loc[(df['a']>=10) &(df['b']>8)]
df[ (df['a']>=10) & (df['b']>=8)]

2.修改

df.loc[df['a']=='yes','a'] ='True' #只是修改了值,并未修改数据类型
df['a'] =df['a'].map({'yes':True,'no':False}) #值和数据类型都修改

3.分组计算

  • 分组查看每组大小
df.groupby(‘a’).size() 
  • 单个统计量
grouped['a'].sum() #grouped是储存分组数据的变量
  • 多个统计量
grouped['a'].agg([np.mean,np.sum])
  • 对所有列球多个统计量
grouped['a'].agg([np.mean,np.sum])
  • 不同列球不同统计量
grouped['a'].agg({'a':np.mean,'b':np.sum})

本文地址:https://blog.csdn.net/weixin_46528046/article/details/107100134