日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python之DataFrame按照規則批量修改某列的數據

系統 5238 0

     在使用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

這個圖看起來比較丑,因為天數比較多,所以橫坐標密密麻麻

 image.png  

我們看下提前預定天數和每個預定天數的產品的情況

 avg_days_befor.head()

 

 image.png  

看下分布情況

#觀察下提前預定天數的分布
avg_days_befor.describe()

從下面表格可以看出,提前預定天數在0-633之間,75%的分布在200以內

 indexavg_days_befor
count259.000000259.000000
mean139.382239485.555985
std97.0807851240.626948
min0.0000001.000000
25%64.5000002.000000
50%129.00000017.000000
75%194.500000180.000000
max633.00000010273.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

 

 image.png  

可以看出,結果已經更改到原來的數據集上了。

那么,如果我們直接執行語句,不復寫原來的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是不會有任何改變的

 image.png  


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 汽车| 南平市| 巩留县| 抚顺县| 澎湖县| 舞阳县| 星座| 宁波市| 大渡口区| 大埔县| 阿拉善左旗| 台湾省| 武清区| 乐至县| 天峻县| 阳山县| 牟定县| 南澳县| 永吉县| 西青区| 吴川市| 杭州市| 洱源县| 平顺县| 宜良县| 内丘县| 常山县| 桑日县| 德阳市| 柞水县| 永顺县| 于田县| 兰州市| 邹城市| 陈巴尔虎旗| 兰西县| 金塔县| 伊通| 齐齐哈尔市| 怀来县| 寿光市|