我一直在尝试用新的方式使用户弄乱数据表...
因此,我尝试将大量的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进行适当的处理-有时在某些行中有人忘记删除所有内容,并留下一个零散的值。
这是有效的解决方案吗?有没有一种简单的方法来查找第一个空行的索引?
答案 0 :(得分:0)
我认为这是一种有效的方法
import pandas as pd
df = pd.DataFrame()
for i , r in df.iterrows():
if pd.isnull(r).any():
df.drop(i,inplace = True)
首先,它对行进行迭代,并检查是否有任何行为空(如果为空),那么我们将在该特定索引中提取值
答案 1 :(得分:0)
这是在特定列中第一个空值之前/之后删除行的方法(不使用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', 'east', 'south', None, 'up', 'down'],
'amount': [10, 20, 30, None, 100, 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