1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Pandas數(shù)據(jù)分析小技巧系列 第四集

        共 1959字,需瀏覽 4分鐘

         ·

        2020-12-04 20:44

        Python與算法社區(qū)
        第?445?篇原創(chuàng),干貨滿滿
        三步加星標(biāo)


        01

        02

        03

        三步加星標(biāo)





        你好!我是 zhenguo

        今天數(shù)據(jù)分析小技巧系列第 4 集,前三集在這里:

        Pandas數(shù)據(jù)分析小技巧系列 第三集

        Pandas 數(shù)據(jù)分析小技巧系列 第二集

        Pandas 數(shù)據(jù)分析小技巧系列 第一集

        小技巧 12 dt 訪問器求時分(HH:mm)的分鐘差

        構(gòu)造如下四行兩列的數(shù)據(jù),時間格式為:HH:MM

        使用pandas讀入數(shù)據(jù):使用的 pandas 版本為 0.25.1

        df?=?pd.read_excel('test_date_subtract.xlsx')
        df

        與時間相關(guān),自然第一感覺便是轉(zhuǎn)化為datetime格式,這里需要注意:需要首先將兩列轉(zhuǎn)化為 str 類型。

        直接使用 astype 轉(zhuǎn)為 str 類型:

        df['a']?=?df['a'].astype(str)
        df['b']?=?df['b'].astype(str)

        然后轉(zhuǎn)化為 datetime 類型:

        df['atime']?=?pd.to_datetime(df['a'])
        df['btime']?=?pd.to_datetime(df['b'])
        df

        然后使用 dt 訪問器轉(zhuǎn)化為分鐘數(shù):

        df['amins']?=?df['atime'].dt.hour?*?60?+?df['atime'].dt.minute?
        df['bmins']?=?df['btime'].dt.hour?*?60?+?df['btime'].dt.minute?
        df

        最后求分鐘數(shù)差值:

        df['mins']?=?df['amins']?-?df['bmins']?

        小技巧 13 轉(zhuǎn)為 DatetimeIndex 求時分(HH:mm)的分鐘差

        轉(zhuǎn)化為 DatetimeIndex 類型后,直接獲取 hour 和 minute 屬性:

        atime?=?pd.DatetimeIndex(df['a'])
        btime?=?pd.DatetimeIndex(df['b'])
        df['amins']?=?atime.hour?*?60?+?atime.minute
        df['bmins']?=?btime.hour?*?60?+?btime.minute?

        小技巧 14 split 求時分(HH:mm)的分鐘差

        split 是更加高效的實(shí)現(xiàn),同樣需要先轉(zhuǎn)化為 str 類型:

        df['a']?=?df['a'].astype(str)
        df['b']?=?df['b'].astype(str)

        其次 split:

        df['asplit']?=?df['a'].str.split(':')
        df['bsplit']?=?df['b'].str.split(':')

        得到結(jié)果如下:

        使用 apply 操作每個元素,轉(zhuǎn)化為分鐘數(shù):

        df['amins']?=?df['asplit'].apply(lambda?x:?int(x[0])*60?+?int(x[1]))
        df['bmins']?=?df['bsplit'].apply(lambda?x:?int(x[0])*60?+?int(x[1]))

        小技巧15 100G 數(shù)據(jù)如何先隨機(jī)讀取1%?

        對于動輒就幾十或幾百個 G 的數(shù)據(jù),在讀取的這么大數(shù)據(jù)的時候,我們有沒有辦法隨機(jī)選取一小部分?jǐn)?shù)據(jù),然后讀入內(nèi)存,快速了解數(shù)據(jù)和開展 EDA ?

        使用 Pandas 的 skiprows 和 概率知識,就能做到。解釋具體怎么做,如下所示,讀取某 100 G 大小的 big_data.csv 數(shù)據(jù)

        1. 使用 skiprows 參數(shù),
        2. x > 0 確保首行讀入,
        3. np.random.rand() > 0.01 表示 99% 的數(shù)據(jù)都會被隨機(jī)過濾掉

        言外之意,只有全部數(shù)據(jù) 1% 才有機(jī)會選入內(nèi)存中。

        import?pandas?as?pd
        import?numpy?as?np
        ??
        df?=?pd.read_csv("big_data.csv",
        skiprows?=
        lambda?x:?x>0and?np.random.rand()?>?0.01)
        ??
        print("The?shape?of?the?df?is?{}.
        It?has?been?reduced?100?times!"
        .format(df.shape))

        使用這種方法,讀取的數(shù)據(jù)量迅速縮減到原來的 1% ,對于迅速展開數(shù)據(jù)分析有一定的幫助。

        下面是我微信,任何問題都可留言:

        不必打賞
        給我點(diǎn)個贊
        就心滿意足了

        瀏覽 44
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            又黄又爽的视频在线观看网站 | 国产成人啪免费观看 | 色五月开心激情网 | 大屌色在线视频 | 亚洲欧美视频播放 | 日韩精品不卡 | 国产最猛黑人xxxxx猛交 | 边挨c边被狠狠打屁股 | 吊逼视频 | 性一色一乱一肉一情 |