<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>

          5招學(xué)會(huì)Pandas數(shù)據(jù)類型轉(zhuǎn)化

          共 11239字,需瀏覽 23分鐘

           ·

          2021-09-07 01:10

          日常數(shù)據(jù)處理中,經(jīng)常需要對(duì)一些數(shù)據(jù)進(jìn)行類型轉(zhuǎn)化以便于后續(xù)的處理,由于自己不太喜歡記住它們,所以每次不記得具體函數(shù)方法的時(shí)候都是搜索一下,感覺還是有點(diǎn)Fei時(shí)間。

          今天我們就整理一下常見的數(shù)據(jù)類型轉(zhuǎn)化操作,然后收藏起來以備不時(shí)之需吧!

          目錄:

          • 1. 加載數(shù)據(jù)時(shí)指定數(shù)據(jù)類型

          • 2. astype轉(zhuǎn)換數(shù)據(jù)類型

          • 3. pd.to_xx轉(zhuǎn)化數(shù)據(jù)類型

            • 3.1. pd.to_datetime轉(zhuǎn)化為時(shí)間類型

            • 3.2. pd.to_numeric轉(zhuǎn)化為數(shù)字類型

            • 3.3. pd.to_timedelta轉(zhuǎn)化為時(shí)間差類型

          • 4. 智能判斷數(shù)據(jù)類型

          • 5. 數(shù)據(jù)類型篩選


          1. 加載數(shù)據(jù)時(shí)指定數(shù)據(jù)類型

          一般來說,為了省事我都是直接pd.DataFrame(data)pd.read_xx(filename)就完事了。

          比如:(下面數(shù)據(jù)大家直接拷貝后讀取剪切板即可

          import pandas as pd

          df = pd.read_excel('數(shù)據(jù)類型轉(zhuǎn)換案例數(shù)據(jù).xlsx')
          df

          國家受歡迎度評(píng)分向往度
          0中國101010.0
          1美國65.87.0
          2日本21.27.0
          3德國86.86.0
          4英國76.6nan

          我們查看dtypes屬性

          df.dtypes
          國家       object
          受歡迎度      int64
          評(píng)分      float64
          向往度     float64
          dtype: object

          可以看到國家字段是object類型,受歡迎度int整數(shù)類型,評(píng)分向往度都是float浮點(diǎn)數(shù)類型。而實(shí)際上,對(duì)于向往度我們可能需要的是int整數(shù)類型,國家字段是string字符串類型。

          那么,我們可以在加載數(shù)據(jù)的時(shí)候通過參數(shù)dtype指定各字段數(shù)據(jù)類型。

          import pandas as pd

          df = pd.read_excel('數(shù)據(jù)類型轉(zhuǎn)換案例數(shù)據(jù).xlsx',
                             dtype={
                                 '國家':'string',
                                 '向往度':'Int64'
                             }
                            )
          df

          國家受歡迎度評(píng)分向往度
          0中國101010
          1美國65.87
          2日本21.27
          3德國86.86
          4英國76.6<nan>

          再查看dtypes屬性

          df.dtypes
          國家       string
          受歡迎度      int64
          評(píng)分      float64
          向往度       Int64
          dtype: object

          同樣,在創(chuàng)建DataFrame類型數(shù)據(jù)時(shí)也可以通過dtype參數(shù)進(jìn)行數(shù)據(jù)類型設(shè)定(案例是對(duì)全部字段進(jìn)行設(shè)置)。

          df = pd.DataFrame({'A':[1,2,3,4.],
                             'B':[1,3,5,7]
                            },
                            dtype='float32'
                           )
          df.dtypes
          A    float32
          B    float32
          dtype: object


          2. astype轉(zhuǎn)換數(shù)據(jù)類型

          對(duì)于已經(jīng)存在的數(shù)據(jù),我們常用astype來轉(zhuǎn)換數(shù)據(jù)類型,可以對(duì)某列(Series)也可以同時(shí)指定多列。

          In [1]: df.受歡迎度.astype('float')
          Out[1]: 
          0    10.0
          1     6.0
          2     2.0
          3     8.0
          4     7.0
          Name: 受歡迎度, dtype: float64

          In [2]: df.astype({'國家':'string',
                             '向往度':'Int64'})
          Out[2]: 
             國家  受歡迎度    評(píng)分   向往度
          0  中國    10  10.0    10
          1  美國     6   5.8     7
          2  日本     2   1.2     7
          3  德國     8   6.8     6
          4  英國     7   6.6  <NA>


          3. pd.to_xx轉(zhuǎn)化數(shù)據(jù)類型

          pd.to_xx

          3.1. pd.to_datetime轉(zhuǎn)化為時(shí)間類型

          • 日期like的字符串轉(zhuǎn)換為日期
          • 時(shí)間戳轉(zhuǎn)換為日期等
          • 數(shù)字字符串按照format轉(zhuǎn)換為日期

          如果遇到無法轉(zhuǎn)換的情況,默認(rèn)情況下會(huì)報(bào)錯(cuò),可以通過參數(shù)設(shè)置errors='coerce'將無法轉(zhuǎn)換的設(shè)置為NaT

          # 將字符串轉(zhuǎn)化為日期
          In [3]: s = pd.Series(['3/11/2000''3/12/2000''3/13/2000'])

          In [4]: s
          Out[4]: 
          0    3/11/2000
          1    3/12/2000
          2    3/13/2000
          dtype: object

          In [5]: pd.to_datetime(s, infer_datetime_format=True)
          Out[5]: 
          0   2000-03-11
          1   2000-03-12
          2   2000-03-13
          dtype: datetime64[ns]

          # 還可以將時(shí)間戳轉(zhuǎn)化為日期
          In [6]: s = pd.Series([149019580515901958051690195805])

          In [7]: pd.to_datetime(s, unit='s')
          Out[7]: 
          0   2017-03-22 15:16:45
          1   2020-05-23 01:03:25
          2   2023-07-24 10:50:05
          dtype: datetime64[ns]

          In [8]: s = pd.Series([149019580543350291215901958054335029121690195805433502912])

          In [9]: pd.to_datetime(s, unit='ns')
          Out[9]: 
          0   2017-03-22 15:16:45.433502912
          1   2020-05-23 01:03:25.433502912
          2   2023-07-24 10:50:05.433502912
          dtype: datetime64[ns]

          # 數(shù)字字符串按照format轉(zhuǎn)換為日期
          In [10]: s = pd.Series(['20200101''20200202''202003'])

          In [11]: pd.to_datetime(s, format='%Y%m%d', errors='ignore')
          Out[11]: 
          0    20200101
          1    20200202
          2      202003
          dtype: object

          In [12]: pd.to_datetime(s, format='%Y%m%d', errors='coerce')
          Out[12]: 
          0   2020-01-01
          1   2020-02-02
          2          NaT
          dtype: datetime64[ns]

          需要注意的是,對(duì)于上述時(shí)間戳的日期轉(zhuǎn)化,起始時(shí)間默認(rèn)是1970-01-01對(duì)于國內(nèi)時(shí)間來說會(huì)相差8小時(shí),我們有以下幾種方式處理。

          In [13]: s
          Out[13]: 
          0    1490195805
          1    1590195805
          2    1690195805
          dtype: int64

          # 默認(rèn)情況下 格林威治時(shí)間
          In [14]: pd.to_datetime(s, unit='s')
          Out[14]: 
          0   2017-03-22 15:16:45
          1   2020-05-23 01:03:25
          2   2023-07-24 10:50:05
          dtype: datetime64[ns]

          # 將起始時(shí)間加上 8小時(shí)
          In [15]: pd.to_datetime(s, unit='s', origin=pd.Timestamp('1970-01-01 08:00:00'))
          Out[15]: 
          0   2017-03-22 23:16:45
          1   2020-05-23 09:03:25
          2   2023-07-24 18:50:05
          dtype: datetime64[ns]

          # 手動(dòng) 加上 8小時(shí) 
          In [16]: pd.to_datetime(s, unit='s') + pd.Timedelta(days=8/24)
          Out[16]: 
          0   2017-03-22 23:16:45
          1   2020-05-23 09:03:25
          2   2023-07-24 18:50:05
          dtype: datetime64[ns]

          3.2. pd.to_numeric轉(zhuǎn)化為數(shù)字類型

          In [17]: s = pd.Series(['1.0''2'-3])

          In [18]: pd.to_numeric(s)
          Out[18]: 
          0    1.0
          1    2.0
          2   -3.0
          dtype: float64

          In [19]: pd.to_numeric(s, downcast='signed')
          Out[19]: 
          0    1
          1    2
          2   -3
          dtype: int8

          In [20]: s = pd.Series(['apple''1.0''2'-3])

          In [21]: pd.to_numeric(s, errors='ignore')
          Out[21]: 
          0    apple
          1      1.0
          2        2
          3       -3
          dtype: object

          In [22]: pd.to_numeric(s, errors='coerce')
          Out[22]: 
          0    NaN
          1    1.0
          2    2.0
          3   -3.0
          dtype: float64

          3.3. pd.to_timedelta轉(zhuǎn)化為時(shí)間差類型

          將數(shù)字、時(shí)間差字符串like等轉(zhuǎn)化為時(shí)間差數(shù)據(jù)類型

          In [23]: import numpy as np

          In [24]: pd.to_timedelta(np.arange(5), unit='d')
          Out[24]: TimedeltaIndex(['0 days''1 days''2 days''3 days''4 days'], dtype='timedelta64[ns]', freq=None)

          In [25]: pd.to_timedelta('1 days 06:05:01.00003')
          Out[25]: Timedelta('1 days 06:05:01.000030')

          In [26]: pd.to_timedelta(['1 days 06:05:01.00003''15.5us''nan'])
          Out[26]: TimedeltaIndex(['1 days 06:05:01.000030''0 days 00:00:00.000015500', NaT], dtype='timedelta64[ns]', freq=None)


          4. 智能判斷數(shù)據(jù)類型

          convert_dtypes方法可以用來進(jìn)行比較智能的數(shù)據(jù)類型轉(zhuǎn)化,請(qǐng)看

          convert_dtypes


          5. 數(shù)據(jù)類型篩選

          看到在一些學(xué)習(xí)群經(jīng)常有朋友問怎么篩選指定數(shù)據(jù)類型的字段,今天我們也來介紹一下。

          Pandas提供了一個(gè)按照字段數(shù)據(jù)類型篩選的函數(shù)select_dtypes(),通過參數(shù)可以選定需要的數(shù)據(jù)類型字段和排除的數(shù)據(jù)類型字段。

          Signature: 
          df.select_dtypes(include=None, exclude=None) -> 'DataFrame'
          Docstring:
          Return a subset of the DataFrame's columns based on the column dtypes.

          數(shù)據(jù)類型有以下幾種:

          數(shù)字:numberintfloat

          布爾:bool

          時(shí)間:datetime64

          時(shí)間差:timedelta64

          類別:category

          字符串:string

          對(duì)象:object

          In [27]: df
          Out[27]: 
             國家  受歡迎度    評(píng)分   向往度
          0  中國    10  10.0  10.0
          1  美國     6   5.8   7.0
          2  日本     2   1.2   7.0
          3  德國     8   6.8   6.0
          4  英國     7   6.6   NaN

          In [28]: df.dtypes
          Out[28]: 
          國家       object
          受歡迎度      int64
          評(píng)分      float64
          向往度     float64
          dtype: object

          In [29]: df.select_dtypes(include='int')
          Out[29]: 
             受歡迎度
          0    10
          1     6
          2     2
          3     8
          4     7

          In [30]: df.select_dtypes(include='number')
          Out[30]: 
             受歡迎度    評(píng)分   向往度
          0    10  10.0  10.0
          1     6   5.8   7.0
          2     2   1.2   7.0
          3     8   6.8   6.0
          4     7   6.6   NaN

          In [31]: df.select_dtypes(include=['int','object'])
          Out[31]: 
             國家  受歡迎度
          0  中國    10
          1  美國     6
          2  日本     2
          3  德國     8
          4  英國     7

          In [32]: df.select_dtypes(exclude=['object'])
          Out[32]: 
             受歡迎度    評(píng)分   向往度
          0    10  10.0  10.0
          1     6   5.8   7.0
          2     2   1.2   7.0
          3     8   6.8   6.0
          4     7   6.6   NaN

          以上就是本次全部內(nèi)容,希望對(duì)你有幫助,喜歡的話記得點(diǎn)個(gè)贊,刷個(gè)在看哦!

          其實(shí),還有更多參數(shù)方法大家可以通過help或者?來看一看演示一下!

          點(diǎn)擊下方卡片進(jìn)行關(guān)注,獲取更多內(nèi)容
          點(diǎn)分享
          點(diǎn)收藏
          點(diǎn)點(diǎn)贊
          點(diǎn)在看
          瀏覽 638
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  一级黄色片网 | 超碰黄片| 天天爽天天澡天天爽视频 - 百度 无码毛片一区二区三区四区五区六区 | 久热精品在线观看视频 | 国产mv和日韩 |