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

问题描述 投票:0回答:2

我有

['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']
python pandas dataframe search arraylist
2个回答
0
投票

只需删除else: miles.append(' ')位。您的代码当前正在执行的操作是将一个空字符串附加到列表中,Python仍将其视为有效对象。因此,您将拥有:

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

(我会对此发表评论,但没有足够的代表。)


0
投票
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']
© www.soinside.com 2019 - 2024. All rights reserved.