在使用Python進行數據分析時,我們經常會看一個數據的分布,然后對數據進行處理。比如說有一個場景:
以下數據是某個產品的提前預定期:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import seaborn as sns import numpy as np %matplotlib inline data = (pd.read_csv('D:/Users/Merchants_portrait.csv')).astype('int') avg_days_befor = (data['avg_days_befor'].value_counts()).reset_index() sns.barplot(x = avg_days_befor.index, y = avg_days_befor['avg_days_befor']) plt.show() # 圖3
這個圖看起來比較丑,因為天數比較多,所以橫坐標密密麻麻
我們看下提前預定天數和每個預定天數的產品的情況
avg_days_befor.head()
看下分布情況
#觀察下提前預定天數的分布 avg_days_befor.describe()
從下面表格可以看出,提前預定天數在0-633之間,75%的分布在200以內
index | avg_days_befor | |
---|---|---|
count | 259.000000 | 259.000000 |
mean | 139.382239 | 485.555985 |
std | 97.080785 | 1240.626948 |
min | 0.000000 | 1.000000 |
25% | 64.500000 | 2.000000 |
50% | 129.000000 | 17.000000 |
75% | 194.500000 | 180.000000 |
max | 633.000000 | 10273.000000 |
根據上面的分析,假如我們想把提前預定天數改為階段分布,我們可以按照如下來做:
我們先定義一個預定天數重寫的函數,然后使用lambda函數應用在那一列上,并且把結果更新到原來數據的該列上,如果不重寫到原來的數據上,那么原dataframe不會變
#對于提前預定天數重寫 def fun_avg_days_befor(x): if x <= 7: return 1 elif x > 7 and x <= 14: return 2 elif x > 14 and x <= 21: return 3 elif x > 21 and x <= 28: return 4 elif x > 28 and x <= 35: return 5 elif x > 35 and x <= 42: return 6 elif x > 42 and x <= 49: return 7 elif x > 49 and x <= 56: return 8 elif x > 56 and x <= 63: return 9 else: return 10 #將數據生效在原dataframe上 data['avg_days_befor'] = data['avg_days_befor'].apply(lambda x:fun_avg_days_befor(x)) avg_days_befor = (data['avg_days_befor'].value_counts()).reset_index()
我們先看下改變后的結果:
sns.barplot(x = avg_days_befor.index, y = avg_days_befor['avg_days_befor']) plt.show() # 圖3
可以看出,結果已經更改到原來的數據集上了。
那么,如果我們直接執行語句,不復寫原來的dataframe呢?我們看下結果
#對于提前預定天數重寫 def fun_avg_days_befor(x): if x <= 7: return 1 elif x > 7 and x <= 14: return 2 elif x > 14 and x <= 21: return 3 elif x > 21 and x <= 28: return 4 elif x > 28 and x <= 35: return 5 elif x > 35 and x <= 42: return 6 elif x > 42 and x <= 49: return 7 elif x > 49 and x <= 56: return 8 elif x > 56 and x <= 63: return 9 else: return 10 data['avg_days_befor'].apply(lambda x:fun_avg_days_befor(x))
從下面結果可以看出,他只是個簡單結果,再查看原來的dataframe是不會有任何改變的
本文為張軍原創文章,轉載無需和我聯系,但請注明來自張軍的軍軍小站,個人博客http://m.eyofj.com
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
