if any():将已在字符串中找到的列表中的元素存储到变量中

时间:2018-02-08 19:08:25

标签: python string pandas dataframe

我有一个包含2列的数据框。我在列TXT中搜索数组的元素(已经工作)但我不知道如何将我找到的元素写入变量值。

E.g。在第一行中,df.TXT是' 30m AB'。 ' AB'是列表l的元素。变量值应为' AB'

| Number | TXT    |
|--------|--------|
| 1234   | 30m AB |
| 2345   | BLA    |
| 3456   | 50g EF |
| 4567   | 1GH    |

我的编码:

创建数据框和数组列表:

df = pd.DataFrame(columns=["Number", "TXT"], data=[[1234,'30m AB'],[2345,'BLA'],[3456,'50g EF'],[4567,'1GH']])
l = ['AB','CD','EF','GH']

定义函数以搜索当前行的字符串中的元素:

def fun(row):    
    value = ''
    string = row.TXT

    if any(s in string for s in l):
        value =   # value should be the element of l found in string        
    return value

for循环为每行df运行功能:

for i, row in df.iterrows():    
    value = fun(row)
    df.set_value(i,'Value',value)

如果您知道如何将列表中的正确元素转换为值,请提供帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我纠错了你,试试这个(阅读评论,有重点):

import pandas as pd

df = pd.DataFrame(
    columns=["Number", "TXT"],
    data=[
        [1234,'30m AB'],
        [2345, 'BLA'],
        [3456, '50g EF'],
        [4567, '1GH'],
        [9087, 'AB1 EF'],
        [9088, ' AB 1 EF '],
]
)

items = ['AB','CD','EF','GH']

# create a new column
df['Value'] = None

# insert items to the column 'Value'
for idx, row  in df.iterrows():
    for item in items:
        if row['TXT'].strip().endswith(item):
            df.at[idx, 'Value'] = item

print df

<强>输出

   Number        TXT Value
0    1234     30m AB    AB
1    2345        BLA  None
2    3456     50g EF    EF
3    4567        1GH    GH
4    9087     AB1 EF    EF
5    9088   AB 1 EF     EF