在数据框条目中搜索字符串并将其复制到python

时间:2018-06-04 04:29:09

标签: python pandas dataframe copy

我有一个包含3列的数据框

它有三列,分别是A,B,C

我想寻找特定的字符串说' apple' 列的所有行 A,如果某个特定行包含字符串' apple'我想将其复制到新列 D - 这样对于同一行列D将包含单词' apple'

我尝试使用for循环,如:

for i in range(16):
    if df.iat[i,1].str.contains('apple').any():
         df.iat[i,2] = 'apple'

但它给了我错误的回答:' str'对象没有属性' str'

我尝试了其他几种方法,但无法弄清楚如何遍历特定的行

2 个答案:

答案 0 :(得分:1)

<强>设置

df
     NAME  VALUE
0   apple      6
1  banana      3
2  cherry      7
3   apple      2
4  banana      5
5  cherry      3

<强>解决方案

全面检查 -

df.loc[df.eq('apple').any(axis=1), 'NEW'] = 'apple'

或者,对于子字符串检查 -

m = df.select_dtypes(object).apply(
    lambda x: x.str.contains('apple')).any(axis=1)
df.loc[m, 'NEW'] = 'apple' 

df

     NAME  VALUE    NEW
0   apple      6  apple
1  banana      3    NaN
2  cherry      7    NaN
3   apple      2  apple
4  banana      5    NaN
5  cherry      3    NaN

答案 1 :(得分:0)

与@ coldspeed的答案类似,但有点简单并适用于几个不同的项目:

import pandas as pd

df = pd.DataFrame(
    dict(Name=['apple', 'banana', 'cherry', 'apple', 'banana', 'orange'],
         Value=[1, 2, 3, 4, 5, 6])
)

m = df.Name.apply(
    lambda x: x in ['apple', 'orange']
)
df.loc[m, 'NEW'] = df.loc[m, 'Name']

#df
    Name    Value   NEW
0   apple   1   apple
1   banana  2   NaN
2   cherry  3   NaN
3   apple   4   apple
4   banana  5   NaN
5   orange  6   orange

这种方法也适用于子串:

lambda x: 'app' in x or 'oran' in x