首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于另一列的str.contains返回空字符串的值。

基于另一列的str.contains返回空字符串的值。
EN

Stack Overflow用户
提问于 2019-09-10 17:11:26
回答 2查看 810关注 0票数 1

我需要基于col1中的字符串填充数据文件中的col2,例如:

代码语言:javascript
复制
Out[]: 
   Col2      Col1 
0  SAP       SAP     
1  Oracle    Oracle     
2            N/A     
3  SAP       SAP     
4  SF        Salesforce     

代码可以工作,但是col1有不属于的值,因为col2是空的。(见第3行)

代码语言:javascript
复制
Out[]: 
   Col2      Col1 
0  SAP       SAP     
1  Oracle    Oracle     
2            Oracle    
3  SAP       SAP     
4  SF        Salesforce     

尝试添加一个pd.np.where(df[column2]str.contains(""), "Empty")

但是,所有的column1都充满了“空”,它忽略了其余的。

这是我的密码:

代码语言:javascript
复制
DF['Col1']= pd.np.where(DF['Col2'].str.contains('Oracle'), 'Oracle',
            pd.np.where(DF['Col2'].str.contains('SAP'), 'SAP',        
            pd.np.where(DF['Col2'].str.contains('SF'), 'Salesforce', 'N/A')))

预期产出如下:

代码语言:javascript
复制
Out[]: 
   Col2      Col1 
0  SAP       SAP      
1  Oracle    Oracle     
2            N/A    
3  SAP       SAP      
4  SF        Salesforce     
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-10 17:24:55

现在得到你所展示的数据框架,我有了一个公平的想法,用我的方式去做,也许会有更好的添加。

正如您在注释部分中所显示的,原始DataFrame:

代码语言:javascript
复制
>>> df
              Catagory     MGA
0           Oracle IPS  Oracle
1  SAP IPS FICA Module  Oracle
2                       Oracle
3   SAAP IPS MM Module  Oracle
4         SF Lightning  Oracle

因此,您可以在Catagory列上使用Catagory方法,方法是将它们拆分为空格分隔符,这将进一步创建四个新列,并且因为您正在寻找来自Catagory列的初始值,这些值将落在必须选择的列0中。

代码语言:javascript
复制
>>> df['Catagory'].str.split(' ', expand=True)
        0          1     2       3
0  Oracle        IPS  None    None
1     SAP        IPS  FICA  Module
2               None  None    None
3    SAAP        IPS    MM  Module
4      SF  Lightning  None    None

正如您在上面看到的,列0仍然有一个空单元格,我们将使用replace()方法,但是,您正在将另一个值SF转换为Salesforce,因此也需要替换它,因此,我将使用带有replace的dict方法一次实现这两种方法。

解决方案:

代码语言:javascript
复制
vals = {'':'Non-MGA', 'SF':'Salesforce'}

>>> df = df.assign(MGA_NEW=df['Catagory'].str.split(' ', expand=True)[0].replace(vals)).drop(columns={'MGA'})
>>> df
              Catagory     MGA_NEW
0           Oracle IPS      Oracle
1  SAP IPS FICA Module         SAP
2                          Non-MGA
3   SAAP IPS MM Module        SAAP
4         SF Lightning  Salesforce

由于我们不需要从split()生成的其他列,所以我删除了它们,并使用assign()方法将值赋值给新列MGA_NEW,并最终删除了不需要的原始列MGA

如果您想再次保留列名MGA,可以这样做。

代码语言:javascript
复制
>>> df.rename(columns={'MGA_NEW':'MGA'}, inplace=True)
>>> df
              Catagory         MGA
0           Oracle IPS      Oracle
1  SAP IPS FICA Module         SAP
2                          Non-MGA
3   SAAP IPS MM Module        SAAP
4         SF Lightning  Salesforce

希望这能帮上忙!

票数 0
EN

Stack Overflow用户

发布于 2019-09-10 17:30:46

而不是使用str.contains(""),您可以考虑使用regex。下面的代码使用regex将整个dataframe中的所有空字符串替换为单词"Empty“:

代码语言:javascript
复制
df.replace(r'^\s*$', 'Empty', regex=True, inplace=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57875479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档