代码之家  ›  专栏  ›  技术社区  ›  theprowler

熊猫:与所有的南的下降列

  •  92
  • theprowler  · 技术社区  · 8 年前

    我意识到 NaN df.dropna 但出于某种原因,这对我来说不起作用,我也不知道为什么。

    fish_frame1:                       0   1   2         3   4       5   6          7
    0               #0915-8 NaN NaN       NaN NaN     NaN NaN        NaN
    1                   NaN NaN NaN  LIVE WGT NaN  AMOUNT NaN      TOTAL
    2               GBW COD NaN NaN     2,280 NaN   $0.60 NaN  $1,368.00
    3               POLLOCK NaN NaN     1,611 NaN   $0.01 NaN     $16.11
    4                 WHAKE NaN NaN       441 NaN   $0.70 NaN    $308.70
    5           GBE HADDOCK NaN NaN     2,788 NaN   $0.01 NaN     $27.88
    6           GBW HADDOCK NaN NaN    16,667 NaN   $0.01 NaN    $166.67
    7               REDFISH NaN NaN       932 NaN   $0.01 NaN      $9.32
    8    GB WINTER FLOUNDER NaN NaN       145 NaN   $0.25 NaN     $36.25
    9   GOM WINTER FLOUNDER NaN NaN    25,070 NaN   $0.35 NaN  $8,774.50
    10        GB YELLOWTAIL NaN NaN        26 NaN   $1.75 NaN     $45.50
    

    下面的代码试图删除所有 s(我认为其中一个或两个都可以):

    fish_frame.dropna()
    fish_frame.dropna(thresh=len(fish_frame) - 3, axis=1)
    

    这将产生:

    fish_frame1 after dropna:                       0   1   2         3   4       5   6          7
    0               #0915-8 NaN NaN       NaN NaN     NaN NaN        NaN
    1                   NaN NaN NaN  LIVE WGT NaN  AMOUNT NaN      TOTAL
    2               GBW COD NaN NaN     2,280 NaN   $0.60 NaN  $1,368.00
    3               POLLOCK NaN NaN     1,611 NaN   $0.01 NaN     $16.11
    4                 WHAKE NaN NaN       441 NaN   $0.70 NaN    $308.70
    5           GBE HADDOCK NaN NaN     2,788 NaN   $0.01 NaN     $27.88
    6           GBW HADDOCK NaN NaN    16,667 NaN   $0.01 NaN    $166.67
    7               REDFISH NaN NaN       932 NaN   $0.01 NaN      $9.32
    8    GB WINTER FLOUNDER NaN NaN       145 NaN   $0.25 NaN     $36.25
    9   GOM WINTER FLOUNDER NaN NaN    25,070 NaN   $0.35 NaN  $8,774.50
    10        GB YELLOWTAIL NaN NaN        26 NaN   $1.75 NaN     $45.50
    

    4 回复  |  直到 4 年前
        1
  •  185
  •   DavideBrex    5 年前

    dropna 文档字符串:

    df.dropna(axis=1, how='all')
    
    
       A    B    D
    0  NaN  2.0  0
    1  3.0  4.0  1
    2  NaN  NaN  5
    
        2
  •  11
  •   Rakesh Adhikesavan    8 年前

    dropna() 删除空值并返回数据帧。将其分配回原始数据帧。

    fish_frame = fish_frame.dropna(axis = 1, how = 'all')
    

    fish_frame.dropna(thresh=len(fish_frame) - 3, axis=1)
    

    这将删除包含7个或更多NaN的列(假设len(df)=10),如果您想删除包含3个以上NaN的列,如您所述,thresh应该等于3。

        3
  •  8
  •   smci    6 年前

    dropna() inplace=False 行为),因此需要将其分配给新的数据帧,以使其保留在代码中。

    例如,

    fish_frame = fish_frame.dropna()
    

    dropna 返回一个空数据帧,我建议您查看dropna方法中的“how”参数( https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

    因此,要删除所有“NAs”的列,axis=0,则=“any”应该如何操作:

    fish_frame = fish_frame.dropna(axis=0, how="any")
    

    最后,“thresh”参数明确指定发生下降需要多少NA。所以

    fish_frame = fish_frame.dropna(axis=0, thresh=3, how="any") 
    

    此外,正如科利指出的,how=“any”是默认值,因此没有必要。

        4
  •  3
  •   Achintha Ihalage    5 年前

    另一种解决方案是创建一个布尔数据帧,在非空位置具有真值,然后获取至少具有一个真值的列。下一行删除具有所有NaN值的列。

    df = df.loc[:,df.notna().any(axis=0)]
    

    df = df.loc[:,df.notna().all(axis=0)]
    

    这种方法在删除包含空字符串、零或基本上任何给定值的列时特别有用。例如

    df = df.loc[:,(df!='').all(axis=0)]
    

    删除至少有一个空字符串的列。