Pandas删除带有特殊字符的行

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)

输出:

Pandas删除带有特殊字符的行

选择具有特殊字符值的列的行

# select the rows
# if Name column
# has special characters
print(df[df.Name.str.contains(r'[@#&$%+-/*]')])

输出:

Pandas删除带有特殊字符的行

# select the rows
# if Grade column
# has special characters
print(df[df.Grade.str.contains(r'[^0-9a-zA-Z]')])

输出:

Pandas删除带有特殊字符的行

合并选定的行

# merge the selected rows
# by using or
print(df[df.Name.str.contains(r'[^0-9a-zA-Z]')
         | df.Grade.str.contains(r'[@#&$%+-/*]')])

输出:

Pandas删除带有特殊字符的行

删除合并后的选定行

# 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))

输出:

Pandas删除带有特殊字符的行

例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))

输出 :

Pandas删除带有特殊字符的行

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程