日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

查询数据去除后面无用的0_Python数据分析与实战

發布時間:2025/3/13 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查询数据去除后面无用的0_Python数据分析与实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Pandas一維數據類型分析

#使用前首先導入需要使用的模塊 import pandas as pd import numpy as np

1.1 創建Series對象

stocks = pd.Series([54.74,190.9,173.14,1050.3,181.86,1139.49],index=['騰訊','阿里巴巴','蘋果','谷歌','Facebook','亞馬遜']) stocks

#獲取描述統計信息 stocks.describe()

stocks.iloc[0] #iloc屬性用于根據位置獲取值

stocks.loc['阿里巴巴'] #loc屬性用于根據索引獲取值

1.2 Series的基本操作

#向量化運算:向量相加 s1 = pd.Series([1,2,3,4],index=['a','b','c','d']) s2 = pd.Series([10,20,30,40],index=['a','c','e','f']) s3 = s1+s2 s3

相同索引值的進行相加,s3中缺失值顯示為NaN (Not a number)

#方法1:刪除缺失值 s3.dropna()

#方法2:將缺失值進行填充 s3 = s1.add(s2,fill_value=0) s3

Series1.add(Series2,fill_value=0),即求Series1+Series2的和,若其中含有缺失值則按0處理。

2. Pandas二維數據分析

2.1 Numpy二維數組結構

#定義二維數組 a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) a

1)查詢元素: a[0,2]

2)獲取第一行:a[0,:]

3)獲取第一列:a[:,0]

4)平均值

a.mean()

a.mean(axis=0) #按列計算平均值

a.mean(axis=1) #按行計算平均值

2.2 Pandas數據框(Dataframe)

#第1步,定義一個字典,映射列名與對應的值 salesDict = {'購藥時間':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],'社保卡號':['001616528','001616528','002602828'],'商品編碼':[236701,236701,236701],'商品名稱':['強力VC銀翅片','清熱解毒口服液','感康'],'銷售數量':[6,1,2],'應收金額':[82.8,28,16.8],'實收金額':[69,24.64,15], } #第2步,定義數據框,參數傳入字典 salesDf = pd.DataFrame(salesDict) salesDf

1)查詢元素:

salesDf.iloc[0,1] salesDf.loc[0,'社保卡號'] #兩者等價

2)獲取第一行:

salesDf.iloc[0,:] salesDf.loc[0,:] #兩者等價

3)獲取第一列:

salesDf.iloc[:,0] salesDf.loc[:,'購藥時間'] #兩者等價

4)獲取某幾列

salesDf[['商品名稱','銷售數量']] salesDf.loc[:,['商品名稱','銷售數量']] #兩者等價

5) 條件查詢獲取

querySer = salesDf.loc[:,'銷售數量']>1 querySer

salesDf.loc[salesDf.loc[:,'銷售數量']>1] #將前面的條件帶入進行查詢

3.案例:藥店銷售數據分析

3.1 數據導入及查看

#excel文件路徑,路徑中的./表示在當前notebook所在的文件夾路徑 fileNameStr='./朝陽醫院2018年銷售數據.xlsx' ''' 使用pandas的read_excel函數讀取Ecxcel數據 參數sheet_name:數據在Excel里的哪個sheet下面,這塊就寫該sheet在excel里的名稱 參數dtype=str 統一先按照字符串讀入,之后再轉換 ''' salesDf = pd.read_excel(fileNameStr,sheet_name='Sheet1',dtype=str) salesDf.head() #打印前5行

#有多少行,多少列 salesDf.shape

#查看每一列的數據類型 salesDf.dtypes

#查看數據信息 salesDf.info()

#描述統計信息 salesDf.describe()

3.2 數據清洗

數據清洗步驟:

  • 選擇子集
  • 列名重命名
  • 去除重復值
  • 缺失值數據處理
  • 數據類型轉換
  • 數據排序
  • 異常值處理

3.2.1 選擇子集(本案例不需要選擇子集)

#注釋掉 #subSalesDf=salesDf.loc[0:4,'購藥時間':'銷售數量']

3.2.2 列名重命名

#字典:舊列名和新列名對應關系 colNameDict = {'購藥時間':'銷售時間'} ''' inplace=False,數據框本身不會變,而會創建一個改動后新的數據框, 默認的inplace是False inplace=True,數據框本身會改動 ''' salesDf.rename(columns = colNameDict,inplace=True) salesDf.head() #可以看到如下,購藥時間變成了銷售時間

3.2.3 去除重復值

salesDf.drop_duplicates(inplace=True) # 去除完全重復的行數據 salesDf.index=range(salesDf.shape[0]) # 重置索引 salesDf.shape

3.2.4 缺失數據處理

python缺失值有3種:

1)Python內置的None值

2)在pandas中,將缺失值表示為NA,表示不可用not available。

3)對于數值數據,pandas使用浮點值NaN(Not a Number)表示缺失數據。

后面出來數據,如果遇到錯誤:說什么float錯誤,那就是有缺失值,需要處理掉

None是Python的一種數據類型,NaN是浮點類型 兩個都用作空值

#None和NaN的區別 print('None的數據類型',type(None)) from numpy import NaN print('NaN的數據類型',type(NaN))

所以,缺失值有3種:None,NA,NaN

# 查看缺失值情況 salesDf.isnull().mean()

#方法一:直接刪除缺失值

#刪除列(銷售時間,社保卡號)中為空的行 #how='any' 在給定的任何一列中有缺失值就刪除 salesDf=salesDf.dropna(subset=['銷售時間','社保卡號'],how='any')

#方法二:用中位數填充缺失值

salesDf['銷售數量'].fillna(salesDf['銷售數量'].median(),inplace=True) # 查看缺失值情況 salesDf.isnull().mean()

其中銷售數量這列字段缺失值已用中位數填充完畢。由于其它字段缺失值用中位數來填充不合適,故沒有展開。在這里只是表明有中位數填充這種方法僅供參考。

若其它數據集中遇到缺失值比較多的情況又不愿刪除,也可以建立隨機森林模型進行填補。

3.2.5 數據類型轉換

#字符串轉換為數值(浮點型) salesDf['銷售數量'] = salesDf['銷售數量'].astype('float') salesDf['應收金額'] = salesDf['應收金額'].astype('float') salesDf['實收金額'] = salesDf['實收金額'].astype('float') print('轉換后的數據類型:n',salesDf.dtypes)

''' 定義函數:分割銷售日期,獲取銷售日期 輸入:timeColSer 銷售時間這一列的值 輸出:分割后的時間 ''' def splitSaletime(timeColSer):dateStr=timeColSer.split(' ')[0]return dateStrsalesDf['銷售時間']=salesDf['銷售時間'].apply(lambda x:splitSaletime(x)) salesDf

'''

數據類型轉換:字符串轉換為日期 ''' #errors='coerce' 如果原始數據不符合日期的格式,轉換后的值為空值NaT #format 是你原始數據中日期的格式 salesDf.loc[:,'銷售時間']=pd.to_datetime(salesDf.loc[:,'銷售時間'],format='%Y-%m-%d', errors='coerce') salesDf.dtypes

''' 轉換日期過程中不符合日期格式的數值會被轉換為空值, 這里刪除列(銷售時間,社保卡號)中為空的行 ''' salesDf=salesDf.dropna(subset=['銷售時間','社保卡號'],how='any')

3.2.6 數據排序

ascending=True 表示升序排列,

ascending=False表示降序排列

na_position=True表示排序的時候,把空值放到前列,這樣可以比較清晰的看到哪些地方有空值

官網文檔:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

#按銷售日期進行升序排列 salesDf=salesDf.sort_values(by='銷售時間',ascending=True,na_position='first') salesDf.head(5)

#重命名行名(index):排序后的列索引值是之前的行號,需要修改成從0到N按順序的索引值 salesDf=salesDf.reset_index(drop=True) salesDf.head()

3.2.7 異常值處理

#描述指標:查看出“銷售數量”值不能小于0 salesDf.describe()

#刪除異常值:通過條件判斷篩選出數據 #查詢條件 querySer=salesDf.loc[:,'銷售數量']>0 #應用查詢條件 print('刪除異常值前:',salesDf.shape) salesDf=salesDf.loc[querySer,:] print('刪除異常值后:',salesDf.shape)

4. 構建模型

業務指標1:月均消費次數=總消費次數 / 月份數

''' 總消費次數:同一天內,同一個人發生的所有消費算作一次消費 #根據列名(銷售時間,社區卡號),如果這兩個列值同時相同,只保留1條,將重復的數據刪除 ''' kpi1_Df=salesDf.drop_duplicates(subset=['銷售時間', '社保卡號'])#總消費次數:有多少行 totalI=kpi1_Df.shape[0] print('總消費次數=',totalI)

此次去重功能有別于對數據重復冗余的處理,可以理解為同一天內同一個人多次消費記錄的合并。

''' 計算月份數:時間范圍 ''' #第1步:按銷售時間升序排序 kpi1_Df=kpi1_Df.sort_values(by='銷售時間',ascending=True)

經升序排列后,將index也進行重置

#重命名行名(index) kpi1_Df=kpi1_Df.reset_index(drop=True) kpi1_Df.head()

#第2步:獲取時間范圍 #最小時間值 startTime=kpi1_Df.loc[0,'銷售時間'] #最大時間值 endTime=kpi1_Df.loc[totalI-1,'銷售時間']#第3步:計算月份數 #天數 daysI=(endTime-startTime).days #月份數: 運算符“//”表示取整除 #返回商的整數部分,例如9//2 輸出結果是4 monthsI=daysI//30 print('月份數:',monthsI)

#業務指標1:月均消費次數=總消費次數 / 月份數 kpi1_I=totalI // monthsI print('業務指標1:月均消費次數=',kpi1_I)

指標2:月均消費金額 = 總消費金額 / 月份數

#總消費金額 totalMoneyF=salesDf.loc[:,'實收金額'].sum() #月均消費金額 monthMoneyF=totalMoneyF / monthsI print('業務指標2:月均消費金額=',monthMoneyF)

指標3:客單價=總消費金額 / 總消費次數
客單價(per customer transaction)是指商場(超市)每一個顧客平均購買商品的金額,客單價也即是平均交易金額。

''' totalMoneyF:總消費金額 totalI:總消費次數 ''' pct=totalMoneyF / totalI print('客單價:',pct)

計算每月的銷售額

#在進行操作之前,先把數據復制到另一個數據框中,防止對之前清洗后的數據框造成影響 groupDf=salesDf #第1步:重命名行名(index)為銷售時間所在列的值 groupDf.index=groupDf['銷售時間'] groupDf.head()

#第2步:分組 gb=groupDf.groupby(groupDf.index.month)#第3步:應用函數,計算每個月的消費總額 mounthDf=gb.sum() mounthDf

目前先寫到這里

總結

以上是生活随笔為你收集整理的查询数据去除后面无用的0_Python数据分析与实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。