如何在熊猫数据框中的空行之后删除所有行

问题描述

我一直在尝试用新的方式使用户弄乱数据表...

因此,我尝试将大量的Excel Sheet数据导入数据库。其中有很多垃圾数据在实际工作表的边缘附近等待。我很确定我可以控制列-应该是17,而不是偶然遇到的78。但是现在我有了一个新的。

我的数据行结束,有一堆空行,然后突然……垃圾。当然,它被导入到数据帧中,虽然我告诉它删除空行或包含4个或更多null值的行,但这些行塞满了数据。只是垃圾数据。

所以我在想,一旦我找到一个空行,就应该转储其余的行。我不确定是否有其他标准可以消除垃圾邮件。当然,我使用的是dropna,但我认为这没有用。

这是我在17之后删除列的代码:

if len(dataf.columns) > 18:
        extra = len(dataf.columns) - 1
        for i in range(extra,17,-1):
            dataf.drop(dataf.columns[i],axis = 1,inplace = True)#drop columns accidentally named and higher than FILED DATE

所以我在想类似的行。我需要空行的索引。然后我得到了dataf.rows的len并删除了多余的部分。然后对dropna进行适当的处​​理-有时在某些行中有人忘记删除所有内容,并留下一个零散的值。

这是有效的解决方案吗?有没有一种简单的方法来查找第一个空行的索引?

解决方法

我认为这是一种有效的方法

import pandas as pd 
df = pd.DataFrame()

for i,r in df.iterrows():
   if pd.isnull(r).any():
      df.drop(i,inplace = True)

首先,它对行进行迭代,并检查是否有任何行为空(如果为空),那么我们将在该特定索引中提取值

,

这是在特定列中第一个空值之前/之后删除行的方法(不使用iterrows()

import pandas as pd

# create data frame
df = pd.DataFrame(
    {'direction': ['north','east','south','west','up','down'],'amount': [10,20,30,None,100,200]})

# is current value None? (False -> 0; True -> 1)
df['empty?'] = df['amount'].isna()

# calculate cumulative sum; will be >= 0 at/after FIRST bad value
df['accum_empty'] = df['empty?'].cumsum()

# boolean mask,for update
mask = df['accum_empty'] == 0

# enable (un-comment) following line to delete
#df = df.loc[mask]

print(df)

  direction  amount  empty?  accum_empty
0     north    10.0   False            0
1      east    20.0   False            0
2     south    30.0   False            0
3      west     NaN    True            1
4        up   100.0   False            1
5      down   200.0   False            1

更新:

您可能希望将第一行上/后的行放所有空值:

# create another data frame
df = pd.DataFrame(
    {'direction': ['north',200]})

# does the whole row consist of `None`
df['row_is_none'] = df.isna().all(axis=1)

# calculate the cumulative sum of the new column
df['row_is_non_accum'] = df['row_is_none'].cumsum()

# create boolean mask and perform drop (not shown to save space)

print(df)
  direction  amount  row_is_none  row_is_non_accum
0     north    10.0        False                 0
1      east    20.0        False                 0
2     south    30.0        False                 0
3      None     NaN         True                 1
4        up   100.0        False                 1
5      down   200.0        False                 1

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...