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

python學(xué)習(xí)——pandas數(shù)據(jù)丟失處理

系統(tǒng) 2101 0

處理丟失數(shù)據(jù)

?

有兩種丟失數(shù)據(jù):

  • None
  • np.nan(NaN)
In?[1]:
                    
                      import 
                      
                        numpy 
                        
                          as 
                          
                            np

                          
                        
                      
                    
                  
In?[12]:
                    
                      %
                      
                        timeit np.arange(0,10000,dtype=int).sum()

                      
                    
                  
?
                    21.3 μs ± 1.66 μs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

                  
In?[13]:
                    
                      %
                      
                        timeit np.arange(0,10000,dtype=float).sum()

                      
                    
                  
?
                    24.2 μs ± 2.7 μs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

                  
In?[14]:
                    
                      %
                      
                        timeit np.arange(0,10000,dtype=object).sum()

                      
                    
                  
?
                    679 μs ± 8.85 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

                  
?

1. None

None是Python自帶的,其類型為python object。因此,None不能參與到任何計(jì)算中。

?

object類型的運(yùn)算要比int類型的運(yùn)算慢得多
計(jì)算不同數(shù)據(jù)類型求和時(shí)間
%timeit np.arange(1e5,dtype=xxx).sum()

In?[14]:
                    
                      %
                      
                        timeit np.arange(1e5,dtype=int).sum()

                      
                    
                  
?
                    185 μs ± 24.2 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

                  
In?[15]:
                    
                      %
                      
                        timeit np.arange(1e5,dtype=float).sum()

                      
                    
                  
?
                    537 μs ± 24.5 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

                  
In?[16]:
                    
                      %
                      
                        timeit np.arange(1e5,dtype=object).sum()

                      
                    
                  
?
                    6.36 ms ± 180 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

                  
?

2. np.nan(NaN)

?

np.nan是浮點(diǎn)類型,能參與到計(jì)算中。但計(jì)算的結(jié)果總是NaN。

?

但可以使用np.nan*()函數(shù)來計(jì)算nan,此時(shí)視nan為0。

In?[?]:
?
?

3. pandas中的None與NaN

?

1) pandas中None與np.nan都視作np.nan

?

創(chuàng)建DataFrame

In?[15]:
                    
                      import 
                      
                        pandas 
                        
                          as 
                          
                            pd

                            
                              from 
                              
                                pandas 
                                
                                  import 
                                  
                                    Series
                                    
                                      ,
                                      
                                        DataFrame 
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
In?[19]:
                    
                      df 
                      
                        = 
                        
                          DataFrame
                          
                            ({
                            
                              'age'
                              
                                :[
                                
                                  20
                                  
                                    ,
                                    
                                      21
                                      
                                        ,
                                        
                                          23
                                          
                                            ,
                                            
                                              19
                                              
                                                ,
                                                
                                                  22
                                                  
                                                    ], 
                                                    
                                                      'salary'
                                                      
                                                        :[
                                                        
                                                          10000
                                                          
                                                            ,
                                                            
                                                              11000
                                                              
                                                                ,
                                                                
                                                                  9900
                                                                  
                                                                    ,
                                                                    
                                                                      8500
                                                                      
                                                                        ,
                                                                        
                                                                          15000
                                                                          
                                                                            ]}, 
                                                                            
                                                                              index
                                                                              
                                                                                =
                                                                                
                                                                                  [
                                                                                  
                                                                                    '張三'
                                                                                    
                                                                                      ,
                                                                                      
                                                                                        '李四'
                                                                                        
                                                                                          ,
                                                                                          
                                                                                            '小昭'
                                                                                            
                                                                                              ,
                                                                                              
                                                                                                '小郭'
                                                                                                
                                                                                                  ,
                                                                                                  
                                                                                                    '小齊'
                                                                                                    
                                                                                                      ], 
                                                                                                      
                                                                                                        columns
                                                                                                        
                                                                                                          =
                                                                                                          
                                                                                                            [
                                                                                                            
                                                                                                              'age'
                                                                                                              
                                                                                                                ,
                                                                                                                
                                                                                                                  'salary'
                                                                                                                  
                                                                                                                    ,
                                                                                                                    
                                                                                                                      'work'
                                                                                                                      
                                                                                                                        ]) 
                                                                                                                        
                                                                                                                          df 
                                                                                                                        
                                                                                                                      
                                                                                                                    
                                                                                                                  
                                                                                                                
                                                                                                              
                                                                                                            
                                                                                                          
                                                                                                        
                                                                                                      
                                                                                                    
                                                                                                  
                                                                                                
                                                                                              
                                                                                            
                                                                                          
                                                                                        
                                                                                      
                                                                                    
                                                                                  
                                                                                
                                                                              
                                                                            
                                                                          
                                                                        
                                                                      
                                                                    
                                                                  
                                                                
                                                              
                                                            
                                                          
                                                        
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[19]:
? age salary work
張三 20 10000 NaN
李四 21 11000 NaN
小昭 23 9900 NaN
小郭 19 8500 NaN
小齊 22 15000 NaN
In?[21]:
                    
                      df
                      
                        .
                        
                          work
                          
                            [
                            
                              '李四'
                              
                                :
                                
                                  '小郭'
                                  
                                    ] 
                                    
                                      = 
                                      
                                        'python' 
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
?
                    C:\Users\BLX\AppData\Roaming\Python\Python37\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  """Entry point for launching an IPython kernel.

                  
In?[22]:
                    
                      df

                    
                  
Out[22]:
? age salary work
張三 20 10000 NaN
李四 21 11000 python
小昭 23 9900 python
小郭 19 8500 python
小齊 22 15000 NaN
?

使用DataFrame行索引與列索引修改DataFrame數(shù)據(jù)

?

2) pandas中None與np.nan的操作

?
  • isnull()
  • notnull()
  • dropna() : 過濾丟失數(shù)據(jù)
  • fillna() : 填充丟失數(shù)據(jù)
In?[?]:
?
?

(1)判斷函數(shù)

  • isnull()
  • notnull()
In?[27]:
                    
                      # 根據(jù)獲得的數(shù)據(jù)去除原來數(shù)據(jù)的空數(shù)據(jù)

                      
                        s1 
                        
                          = 
                          
                            df
                            
                              .
                              
                                isnull
                                
                                  ()
                                  
                                    .
                                    
                                      any
                                      
                                        (
                                        
                                          axis
                                          
                                            =
                                            
                                              1
                                              
                                                ) 
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
In?[29]:
                    
                      # 有了s1這個(gè)數(shù)據(jù),可以獲得哪些數(shù)據(jù)為空

                      
                        df
                        
                          [
                          
                            s1
                            
                              ]

                            
                          
                        
                      
                    
                  
Out[29]:
? age salary work
張三 20 10000 NaN
小齊 22 15000 NaN
In?[33]:
                    
                      # 保留非空數(shù)據(jù) 

                      
                        # .all()判斷軸中所有數(shù)據(jù)都不為空,返回True

                        
                          s2 
                          
                            = 
                            
                              df
                              
                                .
                                
                                  notnull
                                  
                                    ()
                                    
                                      .
                                      
                                        all
                                        
                                          (
                                          
                                            axis
                                            
                                              =
                                              
                                                1
                                                
                                                  ) 
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
In?[34]:
                    
                      df
                      
                        [
                        
                          s2
                          
                            ]

                          
                        
                      
                    
                  
Out[34]:
? age salary work
李四 21 11000 python
小昭 23 9900 python
小郭 19 8500 python
?

(2) 過濾函數(shù)

  • dropna()
?

可以選擇過濾的是行還是列(默認(rèn)為行)

In?[38]:
                    
                      df
                      
                        .
                        
                          dropna
                          
                            ()

                          
                        
                      
                    
                  
Out[38]:
? age salary work
李四 21 11000 python
小昭 23 9900 python
小郭 19 8500 python
In?[37]:
                    
                      df
                      
                        .
                        
                          dropna
                          
                            (
                            
                              axis 
                              
                                = 
                                
                                  1
                                  
                                    ) 
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[37]:
? age salary
張三 20 10000
李四 21 11000
小昭 23 9900
小郭 19 8500
小齊 22 15000
?

也可以選擇過濾的方式 how = 'all',一行中所有數(shù)據(jù)為空才刪除

In?[39]:
                    
                      df
                      
                        .
                        
                          dropna
                          
                            (
                            
                              how
                              
                                =
                                
                                  'all'
                                  
                                    ) 
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[39]:
? age salary work
張三 20 10000 NaN
李四 21 11000 python
小昭 23 9900 python
小郭 19 8500 python
小齊 22 15000 NaN
In?[42]:
                    
                      df
                      
                        .
                        
                          loc
                          
                            [
                            
                              '張三'
                              
                                ] 
                                
                                  = 
                                  
                                    np
                                    
                                      .
                                      
                                        nan 
                                        
                                          df 
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[42]:
? age salary work
張三 NaN NaN NaN
李四 21.0 11000.0 python
小昭 23.0 9900.0 python
小郭 19.0 8500.0 python
小齊 22.0 15000.0 NaN
In?[43]:
                    
                      df
                      
                        .
                        
                          dropna
                          
                            (
                            
                              how
                              
                                =
                                
                                  'all'
                                  
                                    ) 
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[43]:
? age salary work
李四 21.0 11000.0 python
小昭 23.0 9900.0 python
小郭 19.0 8500.0 python
小齊 22.0 15000.0 NaN
?

(3) 填充函數(shù) Series/DataFrame

  • fillna()
In?[47]:
                    
                      # 對(duì)多有的空數(shù)據(jù)進(jìn)行替換

                      
                        df
                        
                          .
                          
                            fillna
                            
                              (
                              
                                value
                                
                                  =
                                  
                                    'Java'
                                    
                                      ) 
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[47]:
? age salary work
張三 Java Java Java
李四 21 11000 python
小昭 23 9900 python
小郭 19 8500 python
小齊 22 15000 Java
?

可以選擇前向填充還是后向填充

In?[49]:
                    
                      df
                      
                        .
                        
                          fillna
                          
                            (
                            
                              method
                              
                                =
                                
                                  'bfill'
                                  
                                    ) 
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[49]:
? age salary work
張三 21.0 11000.0 python
李四 21.0 11000.0 python
小昭 23.0 9900.0 python
小郭 19.0 8500.0 python
小齊 22.0 15000.0 NaN
In?[50]:
                    
                      df
                      
                        .
                        
                          fillna
                          
                            (
                            
                              method
                              
                                =
                                
                                  'ffill'
                                  
                                    ) 
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[50]:
? age salary work
張三 NaN NaN NaN
李四 21.0 11000.0 python
小昭 23.0 9900.0 python
小郭 19.0 8500.0 python
小齊 22.0 15000.0 python
?

對(duì)于DataFrame來說,還要選擇填充的軸axis。記住,對(duì)于DataFrame來說:

  • axis=0:index/行
  • axis=1:columns/列
In?[51]:
                    
                      #{'backfill', 'bfill', 'pad', 'ffill'

                      
                        df
                        
                          .
                          
                            fillna
                            
                              (
                              
                                method
                                
                                  =
                                  
                                    'ffill'
                                    
                                      ) 
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
Out[51]:
? age salary work
張三 NaN NaN NaN
李四 21.0 11000.0 python
小昭 23.0 9900.0 python
小郭 19.0 8500.0 python
小齊 22.0 15000.0 python
In?[?]:
?
?

============================================

練習(xí)7:

  1. 簡(jiǎn)述None與NaN的區(qū)別

  2. 假設(shè)張三李四參加模擬考試,但張三因?yàn)橥蝗幌朊靼兹松艞壛擞⒄Z考試,因此記為None,請(qǐng)據(jù)此創(chuàng)建一個(gè)DataFrame,命名為ddd3

  3. 老師決定根據(jù)用數(shù)學(xué)的分?jǐn)?shù)填充張三的英語成績(jī),如何實(shí)現(xiàn)? 用李四的英語成績(jī)填充張三的英語成績(jī)?

============================================


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 伊春市| 黎川县| 吴忠市| 石柱| 山阴县| 兴隆县| 桂阳县| 五华县| 三明市| 涟源市| 卓资县| 德江县| 彭州市| 舒兰市| 镇原县| 定远县| 教育| 安溪县| 察隅县| 长沙市| 榆中县| 天台县| 景德镇市| 娱乐| 霞浦县| 建始县| 永福县| 文登市| 普安县| 凤凰县| 弋阳县| 杨浦区| 丽水市| 丰城市| 醴陵市| 河东区| 纳雍县| 石景山区| 乡城县| 连城县| 报价|