GVKun编程网logo

如何在熊猫数据框中使用带有多个表达式的str.contains()?(熊猫表格怎么填)

20

想了解如何在熊猫数据框中使用带有多个表达式的str.contains的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于?的相关问题,此外,我们还将为您介绍关于Pandas数据框str.cont

想了解如何在熊猫数据框中使用带有多个表达式的str.contains的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于的相关问题,此外,我们还将为您介绍关于Pandas数据框str.contains()和运算、python-如何在熊猫数据框中设置某个字段的值?、不在熊猫数据框中、在str范围中使用在熊猫数据框中查找的新知识。

本文目录一览:

如何在熊猫数据框中使用带有多个表达式的str.contains()?(熊猫表格怎么填)

如何在熊猫数据框中使用带有多个表达式的str.contains()?(熊猫表格怎么填)

我想知道是否有一种更有效的方法来使用Pandas中的str.contains()函数来一次搜索两个部分字符串。我想在数据框中的给定列中搜索包含“ nt”或“
nv”的数据。现在,我的代码如下所示:

    df[df[''Behavior''].str.contains("nt", na=False)]    df[df[''Behavior''].str.contains("nv", na=False)]

然后我将一个结果附加到另一个。我想做的是使用一行代码来搜索包含“ nt”或“ nv”或“
nf”的任何数据。我已经尝试了一些我认为应该可行的方法,包括仅在术语之间插入一条管道,但是所有这些都会导致错误。我已经检查了文档,但是我不认为这是一个选择。我收到这样的错误:

    ---------------------------------------------------------------------------    TypeError                                 Traceback (most recent call last)    <ipython-input-113-1d11e906812c> in <module>()    3     4     ----> 5 soctol = f_recs[f_recs[''Behavior''].str.contains("nt"|"nv", na=False)]    6 soctol    TypeError: unsupported operand type(s) for |: ''str'' and ''str''

有快速的方法吗?感谢您的帮助,我是一个初学者,但是喜欢数据处理的熊猫。

答案1

小编典典

是一个正则表达式,应位于一个字符串中:

"nt|nv"  # rather than "nt" | " nv"f_recs[f_recs[''Behavior''].str.contains("nt|nv", na=False)]

Python不允许您|在字符串上使用or()运算符:

In [1]: "nt" | "nv"TypeError: unsupported operand type(s) for |: ''str'' and ''str''

Pandas数据框str.contains()和运算

Pandas数据框str.contains()和运算

df(熊猫数据框)具有三行。

some_col_name
"apple is delicious"
"banana is delicious"
"apple and banana both are delicious"

df.col_name.str.contains("apple|banana")

将捕获所有行:

"apple is delicious","banana is delicious","apple and banana both are delicious".

如何在str.contains方法上应用AND运算符,以便它仅捕获同时包含苹果和香蕉的字符串?

"apple and banana both are delicious"

我想抓取包含10-20个不同单词的字符串(葡萄,西瓜,浆果,橘子等)。

python-如何在熊猫数据框中设置某个字段的值?

python-如何在熊猫数据框中设置某个字段的值?

可以说我有一个像这样的熊猫数据框:

d = {'col1': [1,2,3,4],'col2': ['','','']}
df = pd.DataFrame(data=d)

出于某种原因,我必须遍历其所有行,并为col2赋予一定的值.我的循环现在在i = 1,并且col2应该是“检查!”.

似乎很容易

df.iloc[i]['col2']='Check'

但是,这会引发警告,并且是a link,似乎是有必要的,因为df.iloc [i] [‘col2’]只会返回我的empy”,而不是“ Check!”.这应该.

几乎询问了(并解决了)here相同的问题,但是,现在不赞成使用键.is_copy命令,它出现了(我每次都不会收到错误,很奇怪……),因此我很犹豫使用它.

所以

ri = df.iloc[i]
ri.is_copy = False
newval = 'Check!'
ri['col2']=newval
df.iloc[i]=ri

可以正常工作,虽然很不错,但很显然,它将很快停止工作,因此这不是最佳选择.

编辑

在问题中添加警告也许是有道理的,以便使其更加清晰并增加其可搜索性:

In [1]: df.iloc[i]['col2']='Check'
Out[1]: /some/path/ipython:1: SettingWithcopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
最佳答案
这是必须通过位置将位置设置为DataFrame.iat,但必须通过列将位置设置为get_loc

i = 1
df.iat[i,df.columns.get_loc('col2')]='Check'
#slowier
#df.iloc[i,df.columns.get_loc('col2')]='Check'

或通过标签设置为DataFrame.at

i = 1
df.at[df.index[i],'col2']='Check'
#slowier
#df.loc[df.index[i],'col2']='Check'

对于默认的RangeIndex:

df.at[i,'col2']='Check'
print (df)
   col1   col2
0     1       
1     2  Check
2     3       
3     4       

不在熊猫数据框中

不在熊猫数据框中

假设 df1 是

   V1      V2      V3
0  aaa     34      67
1  aaa     34    4545
2  bbb     23  342344
3  bbb     56     776
4  ccc    878     754
5  ccc    454      66
6  ddd  78768      46
7  ddd     56     646

df2 是

   V1      V2   V3
0  aaa     34   67
1  ddd  78768   46
2  ddd     56  646

那么没有来自 df2 的行的 df1 由

给出
df =pd.merge(df1,df2,indicator=True,how='outer').query('_merge=="left_only"').drop('_merge',axis=1)

这是

 V1    V2      V3
1  aaa   34    4545
2  bbb   23  342344
3  bbb   56     776
4  ccc  878     754
5  ccc  454      66

在str范围中使用在熊猫数据框中查找

在str范围中使用在熊猫数据框中查找

如果需要的值介于Trans:Store:之间,请使用Series.str.extract

df['TTT']= df['code'].str.extract('Trans:(.*)Store:',expand=False)
print (df)
                                                code                  TTT
0  Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Te...  S-BRT4-S-BRT4-98683
1  Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Ter...   M-BXP2-M-BX2-65459
2  Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Te...  M-YyL2-M-YyL2-93949

另一个带有双split的想法:

df['TTT']= df['code'].str.split('Store:').str[0].str.split('Trans:').str[1]
print (df)
                                                code                  TTT
0  Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Te...  S-BRT4-S-BRT4-98683
1  Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Ter...   M-BXP2-M-BX2-65459
2  Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Te...  M-YyL2-M-YyL2-93949

您的解决方案不能按以下方式使用:

df['TTT']= df['code'].str.split('Store:').str[0].str[13:]
print (df)
                                                code                  TTT
0  Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Te...  S-BRT4-S-BRT4-98683
1  Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Ter...   M-BXP2-M-BX2-65459
2  Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Te...  M-YyL2-M-YyL2-93949
,

取而代之的是Store:

df['TTT']= df['code'].str.split("Store:",expand=True)[1]

关于如何在熊猫数据框中使用带有多个表达式的str.contains的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Pandas数据框str.contains()和运算、python-如何在熊猫数据框中设置某个字段的值?、不在熊猫数据框中、在str范围中使用在熊猫数据框中查找等相关知识的信息别忘了在本站进行查找喔。

本文标签: