在pandas的列中搜索列表,如果找到则返回字符串值,否则返回null

时间:2020-03-25 21:54:56

标签: python pandas dataframe search arraylist

我有

['2013 (63 reg)', '76,869 miles', '2.0L','Manual', 'Diesel</li>\n</ul>']
['2011 (61 reg)', 'Estate', '2.0L', '135BHP','Manual', 'Diesel', '4 owners</li>\n</ul>']
['2011 (11 reg)', 'Saloon', '112,000 miles', '2.1L', '201BHP','Manual', 'Diesel', '4 owners', 'Partservice history</li>\n</ul>']
['2007 (07 reg)', 'Saloon', '98,000 miles','3.0L', '222BHP', 'Automatic', 'Diesel']
列中的

数据帧df中的数据 我有这段代码检查是否存在单词“ miles”(如果存在),它返回包含英里的字符串,否则返回空并将其存储在列表中

miles=[]
sub = 'miles'
for f in df['Data'] :
    for text in f:
        if sub in text:
            miles.append(text)
        else:
            miles.append('')`

它为所有文本值(而不是每个列表)返回' ' 我哪里有这样的东西

['',
 '76,869 miles',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '112,000 miles',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '98,000 miles',
 '',
 ]

我想要的地方

['76,869 miles',
'',
'112,000 miles',
'98,000 miles']

1 个答案:

答案 0 :(得分:1)

好吧,您正在使用nested循环来检查每个列表中的每个element。当前在您的代码中检查元素中是否有miles并返回它,如果不是,那么您只是附加与没有''的元素相对应的miles

但是这里的逻辑是搜索每个列表的elements,如果list不包含所需的target,那么我们需要代码来用Hey, I'm not there进行回复。

因此,我们必须将generatornext函数一起使用。

data = [['2013 (63 reg)', '76,869 miles', '2.0L',
         'Manual', 'Diesel</li>\n</ul>'],
        ['2011 (61 reg)', 'Estate', '2.0L', '135BHP',
         'Manual', 'Diesel', '4 owners</li>\n</ul>'],
        ['2011 (11 reg)', 'Saloon', '112,000 miles', '2.1L', '201BHP',
         'Manual', 'Diesel', '4 owners', 'Partservice history</li>\n</ul>'],
        ['2007 (07 reg)', 'Saloon', '98,000 miles',
         '3.0L', '222BHP', 'Automatic', 'Diesel']]


new = [next((t for t in item if "miles" in t), "Miles Not Found")
       for item in data]

print(new)

输出:

['76,869 miles', 'Miles Not Found', '112,000 miles', '98,000 miles']