<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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 是更加高效的實現(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ù)分析有一定的幫助。

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

          不必打賞
          給我點個贊
          就心滿意足了

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码操大逼 | 一级 a一级 a 免费观看免免黄 | 777精品视频 | 成人免费观看18 | 免费毛片网站高清无码在线观看 |