使用内置的 Pandas 方法进行高级数据处理和字符串操作
Pandas 库被广泛用作数据处理和分析工具,用于从数据中清理和提取特征。
在处理数据时,编辑或删除某些数据作为预处理步骤的一部分。这可能涉及从现有列创建新列,或修改现有列以使它们适合更易于使用。为此,Pandas 提供了多种方法,您可以使用这些方法来处理 DataFrame 中所有数据类型的列。
在这篇文章中,让我们具体看看在 DataFrame 中的列中替换值和子字符串。当您想替换列中的每个值或只想编辑值的一部分时,这会派上用场。
如果您想继续,请在此处下载数据集并加载下面的代码。
代码语言:javascript复制 import pandas as pd
df = pd.read_csv('WordsByCharacter.csv')
使用“替换”来编辑 Pandas DataFrame 系列(列)中的字符串
Pandas 中的 replace 方法允许您在 DataFrame 中的指定系列中搜索值,以查找随后可以更改的值或子字符串。首先,让我们快速看一下如何通过将“Of The”更改为“of the”来对表中的“Film”列进行简单更改。
代码语言:javascript复制 # change "Of The" to "of the" - simple regex
df["Film"].replace("Of The", "of the") # won't work if you do this
df["Film"].replace("Of The", "of the", regex=True)
上面,我们所做的只是将我们正在寻找的子字符串作为第一个参数传递给 replace 方法,然后将我们想要替换的值作为第二个参数传递。您会看到我们还必须传递 regex=True 才能使操作生效。否则,replace 方法只会更改“Of The”的列值,因为它只会匹配整个值。
您可以通过匹配确切的字符串并提供您想要更改的整个值来完成我们上面所做的相同的事情,如下所示。
代码语言:javascript复制 df["Film"].replace("The Fellowship Of The Ring", "The Fellowship of the Ring")
这种方法的问题在于您、必须逐案匹配值。也就是说,需要传递想要更改的每个值,以及希望将其更改为什么值。在某些情况下,使用查找和替换与定义的正则表达式匹配的所有内容可能更容易。
但是,在想要将不同的值更改为不同的替换值的情况下,不必多次调用 replace 方法。相反,可以简单地传递一个字典,其中键是要搜索的列值,而值是要替换原始值的内容。下面是一个简单的例子。
代码语言:javascript复制 # you can do multiple replacements in within one call of the replace method by creating a mapping dictionary
# very scalable woo
replacement_mapping_dict = {
"The Fellowship Of The Ring": "The Fellowship of the Ring",
"The Return Of The King": "The Return of the King"
}
df["Film"].replace(replacement_mapping_dict)
之前,我们只是简单地传递 regex=True 以便我们可以匹配子字符串。让我们更进一步,实际编写一些正则表达式来匹配。 让我们做一些数据清理,并在 replace 方法中使用正则表达式删除这些数据。
代码语言:javascript复制 # remove number number colon from "Chapter" - bit more complex regex example
# regex is just <= 3 repetitions of any numeric character (0-9) immediately followed by a colon and a space
df["Chapter"].replace(r"d{,3}: ", "", regex=True)
我们所做的只是传递 r"d{,3}: " 来匹配三个或更少的数字字符后跟一个冒号和一个空格(这将捕获“01:”、“02:”、...、“100 :“, 等等)。每当在列值中找到它时,它就会从字符串中删除,因为我们传递的第二个参数是一个空字符串。
或者,如果您不想每次调用 replace 方法时都传递 regex=True,则可以改为完成上述相同的结果,如下所示:
代码语言:javascript复制 # alternate way of doing the same thing (instead of having to pass regex=True at the end)
# if you had multiple things you want to replace you can put them all in a list
regex_list = [r"d{,3}: ", r"The "]
df["Chapter"].replace(regex=regex_list, value="")
结果与之前相同,但有一些差异使此方法更加清晰。首先,如果有多个想要匹配的正则表达式,可以在列表中定义它们,并将其作为关键字参数传递给 replace 方法。然后,只需要显式传递另一个关键字参数值来定义想要的替换值。这样如果有人查看的代码可能会很容易理解它的作用并对其进行扩展。
在清理数据时,这是一个相当常见的过程,所以我希望您发现这篇对 Pandas 替换方法的快速介绍对自己的工作有用。
祝你的数据之旅好运!
作者:Byron Dolon