如何遍历熊猫数据框,检查条件,执行字符串操作并写入新列?

时间:2019-05-14 18:01:20

标签: python string pandas loops conditional

我有一个如下数据框;

--------------------------------
Col1    Col2                    
--------------------------------
1       AppVer: 1.1.1 | name: A 
0       name:B                  
1       AppVer: 2.3.1 | name: B 

我想根据条件创建一个新列(newCol3) 1.如果Col1 = 1,则根据“ |”分割Col2并写入列newCol3 2.如果Col1 = 0,则将“ Not Applicable”写入newCol3列

我尝试了下面的代码使用循环和条件语句进行循环;

for index, row in df1.iterrows():
    if row['Col1']==1:
        df1['newCol3']="NA"
    elif row['Col1']==0:
        a=row['Col2'].split("|")
        df1['newCol3']=a[0]

但是,我在newCol3中的值不符合预期,如下所示。 另外,我得到这样的警告 主要:8:SettingWithCopyWarning: 试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] = value 请参见文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

获得的输出:

---------------------------------------------------
Col1    Col2                        newCol3
---------------------------------------------------
1       AppVer: 1.1.1 | name: A     1.1.1
0       name:B                      1.1.1
1       AppVer: 2.3.1 | name: B     2.3.1

预期输出:

---------------------------------------------------
Col1    Col2                        newCol3
---------------------------------------------------
1       AppVer: 1.1.1 | name: A     1.1.1
0       name:B                      Not Applicable
1       AppVer: 2.3.1 | name: B     2.3.1

向我提供任何帮助/建议。

2 个答案:

答案 0 :(得分:0)

在您的情况下,我建议使用loc创建一个新列。

文档:loc

文档:str expand

str提取文档:str.extract

df.loc[df['Col1']==1,'Col3'] = df['Col2'].str.extract(pat='insert the pattern here')
df.loc[df['Col1']==0,'Col3'] = 'Not Applicable'

刚刚看到了预期的输出。阅读我链接的文档,并根据需要更改str.extract

答案 1 :(得分:0)

我觉得你可以做到

df['New']=df.Col2.str.extract('(\d*\.?\d+\.?\d+)').fillna('Not Applicable')
df
Out[43]: 
   Col1                      Col2             New
0     1  AppVer: 1.1.1 | name: A            1.1.1
1     0  name:B                    Not Applicable
2     1  AppVer: 2.3.1 | name: B            2.3.1