Python 应用于数据帧的str.contains()的用法

Python 应用于数据帧的str.contains()的用法,python,string,pandas,jupyter,Python,String,Pandas,Jupyter,我是Python和Jupyter笔记本的新手,目前正在学习本教程:。到目前为止,我已经导入了pandas库和其他一些东西,并制作了一个数据框“df”,它只是一个公司利润和收入数据的CSV文件。我很难理解本教程的以下内容: non_numberic_profits = df.profit.str.contains('[^0-9.-]') 我理解本教程的要点:识别利润变量包含字符串而不是数字的所有公司。但是我不明白[^0-9.-]的意义以及上面的函数实际上是如何工作的 我的完整代码如下。谢谢 im

我是Python和Jupyter笔记本的新手,目前正在学习本教程:。到目前为止,我已经导入了pandas库和其他一些东西,并制作了一个数据框“df”,它只是一个公司利润和收入数据的CSV文件。我很难理解本教程的以下内容:

non_numberic_profits = df.profit.str.contains('[^0-9.-]')
我理解本教程的要点:识别利润变量包含字符串而不是数字的所有公司。但是我不明白[^0-9.-]的意义以及上面的函数实际上是如何工作的

我的完整代码如下。谢谢

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")

df = pd.read_csv('fortune500.csv')
df.columns = ['year', 'rank', 'company', 'revenue', 'profit']
non_numberic_profits = df.profit.str.contains('[^0-9.-]')
df.loc[non_numberic_profits].head()

表达式
[^0-9.-]
是一个所谓的正则表达式,它是一个用于描述搜索模式的特殊文本字符串。使用正则表达式(或简称“RegEx”)可以提取字符串的特定部分。例如,您可以从字符串
123foo456
中提取
foo

在正则表达式中,当使用
[]
时,您定义了必须匹配的字符范围。例如,
[bac]
匹配字符串
abcdefg
中的
abc
<代码>[bac]也可以重写为
[a-c]

使用
[^]
可以对字符范围求反。因此,应用于上述示例的RegEx
[^a-c]
将匹配
defg

现在有一个陷阱:
由于
^
-
在正则表达式中使用时具有特殊的含义,因此必须将它们放在
[]
中的特定位置,以便进行字面匹配。具体来说,如果您想逐字匹配
-
,并想将其从字符范围中排除,则必须将其放在
[]
的最右端,例如
[abc-]

将所有内容放在一起
RegEx
'[^0-9.-]
的意思是:“匹配所有不包含数字0到9、点(
)或破折号(
-
)的子字符串。”。您可以看到正则表达式应用于一些示例字符串

pandas函数
df.price.str.contains(“[^0-9.-]”)
检查数据帧的
price
列中的字符串是否与此正则表达式匹配,如果匹配,则返回
True
,如果不匹配,则返回
False
。结果是一个
系列
,其中包含生成的
/


如果你被困住了,他们是你的朋友。堆栈溢出和也是很好的起点