Pandas删除带有特殊字符的行
在这篇文章中,我们将学习如何删除带有特殊字符的行,也就是说,如果一个行包含任何包含特殊字符的值,如@, %, &, $, #, +, -, *, /,
等,那么就删除这些行并修改数据。要删除这样的行,首先,我们必须搜索每一列有特殊字符的行,然后再删除。为了搜索,我们使用正则表达式[@#&$%+-/*]或[^0-9a-zA-Z]
。让我们通过一些例子来讨论整个过程。
示例 1:
这个例子由一些带有代码的部分组成,所使用的数据框架可以通过点击data1.csv下载或如下所示。
# importing package
import pandas as pd
# load dataset
df = pd.read_csv("data1.csv")
# view dataset
print(df)
输出:
选择具有特殊字符值的列的行。
# select the rows
# if Name column
# has special characters
print(df[df.Name.str.contains(r'[@#&$%+-/*]')])
输出:
# select the rows
# if Grade column
# has special characters
print(df[df.Grade.str.contains(r'[^0-9a-zA-Z]')])
输出:
合并选定的行
# merge the selected rows
# by using or
print(df[df.Name.str.contains(r'[^0-9a-zA-Z]')
| df.Grade.str.contains(r'[@#&$%+-/*]')])
输出:
删除合并后的选定行。
# drop the merged selected rows
print(df.drop(df[df.Name.str.contains(r'[^0-9a-zA-Z]')
| df.Grade.str.contains(r'[^0-9a-zA-Z]')].index))
输出:
例2:本例使用一个数据框架,可以通过点击data2.csv下载,或如下图所示。
# importing package
import pandas as pd
# load dataset
df = pd.read_csv("data2.csv")
# view dataset
print(df)
# select and then merge rows
# with special characters
print(df[df.ID.str.contains(r'[^0-9a-zA-Z]') |
df.Name.str.contains(r'[^0-9a-zA-Z]') |
df.Age.str.contains(r'[^0-9a-zA-Z]') |
df.Country.str.contains(r'[^0-9a-zA-Z]')])
# drop the rows
print(df.drop(df[df.ID.str.contains(r'[^0-9a-zA-Z]') |
df.Name.str.contains(r'[^0-9a-zA-Z]') |
df.Age.str.contains(r'[^0-9a-zA-Z]') |
df.Country.str.contains(r'[^0-9a-zA-Z]')].index))
输出 :