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

歡迎訪問 生活随笔!

生活随笔

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

python

数据框按行拼接_利用Python进行数据分析

發布時間:2024/8/5 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据框按行拼接_利用Python进行数据分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1.一維數據分析

#導入numpy包 import numpy as np#導入panda包 import pandas as pd

numpy 一維數組 array

#定義:numpy一維數組array a=np.array([1,2,3,4,5])

1)查詢元素

#查詢元素 a[0]

輸出:

1

2)切片訪問

#切片訪問 a[1:4]

輸出:

array([2, 3, 4])

3)循環訪問

for i in a:print (i,'time 3 =',i*3)

輸出:

1 time 3 = 3 2 time 3 = 6 3 time 3 = 9 4 time 3 = 12 5 time 3 = 15

4)數據類型

#數據類型 a.dtype

輸出:

dtype('int32')
  • numpy 一維數組與列表的區別:

1)區別1:numpy 一維數組的統計功能

#一維數組的平均值 a.mean()

輸出:

3.0#一維數組的標準差 a.std()

輸出:

1.4142135623730951

2)區別2:numpy 一維數組的向量化計算

#向量相加 a[0:2]+a[3:5]

輸出:

array([5, 7])#乘以標量 a[0:5]*10

輸出:

array([10, 20, 30, 40, 50])

pandas 一維數組 series

#定義:pandas一維數組series S1=pd.Series([1,2,3,4],index=['a','b','c','d'])

描述統計:

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

輸出:

count 4.000000 mean 2.500000 std 1.290994 min 1.000000 25% 1.750000 50% 2.500000 75% 3.250000 max 4.000000 dtype: float64

iloc 和 loc:

  • iloc屬性用于根據位置查詢值
#iloc屬性用于根據位置獲取值 S1.iloc[0]

輸出:

1
  • loc屬性用于根據索引獲取值
#loc屬性用于根據索引獲取值 S1.loc['a']

輸出:

1

向量相加

#向量化運算:向量相加 S1=pd.Series([1,2,3,4],index=['a','b','c','d']) S2=pd.Series([5,6,7,8],index=['a','b','e','f']) S3=S1+S2 S3

輸出 :

a 6.0 b 8.0 c NaN d NaN e NaN f NaN dtype: float64

以上存在缺失值。有以下解決方法:

方法1:刪除缺失值

#刪除缺失值 S1=pd.Series([1,2,3,4],index=['a','b','c','d']) S2=pd.Series([5,6,7,8],index=['a','b','e','f']) S4=S1+S2 S4.dropna()

輸出:

a 6.0 b 8.0 dtype: float64

方法2:填充缺失值

#填充缺失值 S1=pd.Series([1,2,3,4],index=['a','b','c','d']) S2=pd.Series([5,6,7,8],index=['a','b','e','f']) S5=S1.add(S2,fill_value=0) S5

輸出:

a 6.0 b 8.0 c 3.0 d 4.0 e 7.0 f 8.0 dtype: float64

2.二維數據分析

numpy二維數據結構

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

1)查詢元素

#查詢第一行,第三列元素 a[0,2]

輸出:

3

2)獲取第n行

#獲取第2行 a[1,:]

輸出:

array([5, 6, 7, 8])

3)獲取第n列

#獲取第3列 a[:,2]

輸出:

array([ 3, 7, 11])

numpy數軸參數

1)按行計算

#按行計算:axis=1計算每一行 a.mean(axis=1)

輸出:

array([ 2.5, 6.5, 10.5])

1)按列計算

#按列計算:axis=0計算每一列 a.mean(axis=0)

輸出:

array([ 5., 6., 7., 8.])

pandas數據框(DataFrame)

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

輸出:

1)有序的數據框

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

輸出:

2)平均值

#按列計算平均值 salesDf.mean()

輸出:

商品編碼 236701.000000 銷售數量 3.000000 應收金額 42.533333 實收金額 36.213333 dtype: float64
  • iloc屬性用于根據位置查詢值

1)查詢元素

#查詢元素 salesDf.iloc[1,2]

輸出:

236701

2)獲取第n行

#獲取第1行: salesDf.iloc[0,:]

輸出:

購藥時間 2008-01-01 星期五 社保卡號 001616528 商品編碼 236701 商品名稱 強力VC銀翹片 銷售數量 6 應收金額 82.8 實收金額 69 Name: 0, dtype: object

3)獲取第n列

#獲取第1列: saleDf.iloc[:,0]

輸出:

0 2008-01-01 星期五 1 2018-01-02 星期六 2 2018-01-26 星期三 Name: 購藥時間, dtype: object
  • loc屬性用于根據索引查詢值

1)查詢元素

#查詢元素 salesDf.loc[0,'商品名稱']

輸出

'強力VC銀翹片'

2)獲取某行

#獲取第1行: salesDf.loc[0,:]

輸出:

購藥時間 2008-01-01 星期五 社??ㄌ? 001616528 商品編碼 236701 商品名稱 強力VC銀翹片 銷售數量 6 應收金額 82.8 實收金額 69 Name: 0, dtype: object

3)獲取某列

#獲取第1列: salesDf.loc[:,'商品名稱']

或者:

#查詢 商品名稱 列 salesDf['商品名稱']

輸出:

0 強力VC銀翹片 1 清熱解毒口服液 2 感康 Name: 商品名稱, dtype: object

延伸:

#查詢 商品編碼 ,商品名稱,銷售數量 三列 salesDf[['商品編碼','商品名稱','銷售數量']]

輸出:

4)切片功能

#查詢指定范圍 salesDf.loc[:,'商品編碼':'銷售數量']

輸出:

5)通過條件判斷篩選

a. 構建查詢條件

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

輸出:

0 True 1 False 2 False Name: 銷售數量, dtype: bool#查看數據類型 type(querySer)

輸出:

pandas.core.series.Series

b. 應用查詢條件

salesDf.loc[querySer,:]

輸出:


數據分析的基本過程

數據分析步驟:

提出問題→理解數據→數據清洗→構建模型→數據可視化

1、提出問題

a.月均消費次數

b.月均消費金額

c.客單價

d.消費趨勢

2、理解數據

1)讀取Excel數據

#讀取Excel數據 fileNameStr='.../朝陽醫院2018年銷售數據.xlsx' xls=pd.ExcelFile(fileNameStr) salesDf=xls.parse('Sheet1')

2)數據集描述統計信息

a. 打印前5行

#打印前5行 salesDf.head()

輸出:

b. 統計行數,列數

#統計行數,列數 salesDf.shape

輸出:

(6578, 7)

c. 查詢某列的數據類型

#查看'購藥時間'一列的數據類型 salesDf.loc[:,'購藥時間'].dtype

輸出:

dtype('O')

d. 查看所有列的數據類型

#查看所有列的數據類型 salesDf.dtypes

輸出:

購藥時間 object 社保卡號 object 商品編碼 object 商品名稱 object 銷售數量 object 應收金額 object 實收金額 object dtype: object

e.每一列的統計數

#每一列的統計數 salesDf.describe()

輸出:


3、數據清洗

數據清洗的基本過程:

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

1.選擇子集

#選擇子集 subSalesDf=salesDf.loc[0:4,'購藥時間':'銷售數量'] subSalesDf

輸出:

2.列名重命名

colNameDict={'購藥時間':'銷售時間'} ''' inplace=False,數據框本身不會變,而會創建一個新數據框,inplace默認Flase; inplase=True,數據框本身會改動 ''' salesDf.rename(columns=colNameDict,inplace=True) salesDf.head()

輸出:

3.缺失數據處理

print('刪除缺失值前的大小',salesDf.shape) salesDf=salesDf.dropna(subset=['銷售時間','社??ㄌ?#39;],how='any') print('刪除缺失值后的大小',salesDf.shape)

輸出:

刪除缺失值前的大小 (6578, 7) 刪除缺失值后的大小 (6575, 7)

4.數據類型轉換

(1)字符串轉化為數值

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

輸出:

轉化后的數據類型:銷售時間 object 社??ㄌ? object 商品編碼 object 商品名稱 object 銷售數量 float64 應收金額 float64 實收金額 float64 dtype: object

(2)處理日期

''' 定義函數:分割銷售日期,獲得銷售日期 輸出:timecolSer銷售時間一列是Series數據類型 輸出:分割后的時間,返回也是個Serries數據類型 ''' def splitSaletime(timeColSer):timeList=[]for value in timeColSer:dateStr=value.split(' ')[0]timeList.append(dateStr)#將列表轉換為一維數據Series類型timeSer=pd.Series(timeList)return timeSer #獲取銷售時間一列 timeSer=salesDf.loc[:,'銷售時間'] #分割字符串,獲取銷售日期 dateSer=splitSaletime(timeSer) #修改銷售時間一列的值 salesDf.loc[:,'銷售時間']=dateSer salesDf.head()

輸出

(3)字符串轉換為日期

salesDf.loc[:,'銷售時間']=pd.to_datetime(salesDf.loc[:,'銷售時間'],format='%Y-%m-%d',errors='coerce') salesDf=salesDf.dropna(subset=['銷售時間','社保卡號'],how='any') salesDf.dtypes

輸出:

銷售時間 datetime64[ns] 社??ㄌ? object 商品編碼 object 商品名稱 object 銷售數量 float64 應收金額 float64 實收金額 float64 dtype: object

5.數據排序

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

輸出

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

輸出:

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

輸出:

(6)異常值處理

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

輸出:

刪除異常值前: (6549, 7) 刪除異常值后: (6506, 7)

4、構建模型

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

(總消費次數:同一天內,同一個人發生的所有消費算作一次消費)

求總消費次數

#第一步:刪除重復數據 kpi1_Df=salesDf.drop_duplicates(subset=['銷售時間','社保卡號']) #第二步:行數 totalⅠ=kpi1_Df.shape[0] print('總消費次數=',totalⅠ)

輸出:

總消費次數= 5342

求月份數

#第一步:排序 #按銷售時間升序 kpi1_Df=kpi1_Df.sort_values(by='銷售時間',ascending=True) #重命名排名 kpi1_Df=kpi1_Df.reset_index(drop=True) #第二步:獲取時間范圍 #最小時間值 startTime=kpi1_Df.loc[0,'銷售時間'] #最大時間值 endTime=kpi1_Df.loc[totalⅠ-1,'銷售時間'] #第三步:計算月份數 #天數 daysⅠ=(endTime-startTime).days #月份數 monthsⅠ=daysⅠ//30 print('月份數:',monthsⅠ)

輸出

6

求月均消費次數

kip1_Ⅰ=totalⅠ//monthsⅠ print('業務指標1:月均消費次數=',kip1_Ⅰ)

輸出:

業務指標1:月均消費次數= 890

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

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

輸出

業務指標2:月均消費金額= 50668.351666666305

業務指標3:客單價=總消費金額/總消費次數

pct=totalMoneyF/totalⅠ print('客單價:',pct)

輸出:

客單價: 56.9094178210404

總結:

數據分析步驟:

提出問題→理解數據→數據清洗→構建模型→數據可視化

數據清洗步驟:

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

總結

以上是生活随笔為你收集整理的数据框按行拼接_利用Python进行数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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