Python 应用于数据帧的str.contains()的用法
我是Python和Jupyter笔记本的新手,目前正在学习本教程:。到目前为止,我已经导入了pandas库和其他一些东西,并制作了一个数据框“df”,它只是一个公司利润和收入数据的CSV文件。我很难理解本教程的以下内容: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
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
。结果是一个系列
,其中包含生成的真
/假
值
如果你被困住了,他们是你的朋友。堆栈溢出和也是很好的起点