Py学习  »  Python

Python:无法成功删除仅包含空格值的行

celery_gemini • 3 年前 • 1268 次点击  

我有一个包含地址字段的数据框,比如 NUMBER , STREET , POSTCODE 等等。我想删除所有包含 NaN 空格 任何 在这些专栏中。

第一部分,移除 -包含行适用于:

df = df.dropna(subset=["NUMBER","STREET","POSTCODE"]

但我在空白处遇到了麻烦。我注意到有些行包含 "" 价值观,还有可能 " " 以及其他“看不见的”字符串。根据其他问题的建议,我尝试了以下方法:

df.replace("",np.nan,inplace=True) # then using dropna

df.drop(df.loc[df["NUMBER"]==""].index, inplace=True) # then repeating for the other cols

df = df[df["NUMBER"].str.strip().astype(bool)] # then repeating for the other cols

但在所有情况下,我最终还是得到了空值。我确认至少有一些空格与字符串相等 "" 通过使用:

df["NUMBER"][index_with_blank] == "" # which returns: True

type(df["NUMBER"][index_with_blank]) # which returns: str

所以现在我不知道该如何处理这些行。非常感谢您的帮助或建议。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133783
 
1268 次点击  
文章 [ 1 ]  |  最新文章 3 年前
jezrael
Reply   •   1 楼
jezrael    3 年前

将“否”、“一个或多个空格”替换为缺少的值,然后删除行:

df = df.replace(r'^\s*$', np.nan, regex=True).dropna(subset=["NUMBER","STREET","POSTCODE"])

或者,如果需要删除某些列中的值,而不更改原始数据帧:

cols = ["NUMBER","STREET","POSTCODE"]
df = df[df[cols].replace(r'^\s*$', np.nan, regex=True).notna().all(axis=1)]