запись csv в python на основе условия подстроки

#python #string #csv #substring

#python #строка #csv #подстрока

Вопрос:

У меня есть следующая result переменная во фрейме данных ( df ), и я пытаюсь вывести csv-файл для тех, которые начинаются с «test»

 abandoned
static
test_a_1
test_b_2
abandoned
test_b_3
  

Следующий код не работает. Заранее спасибо за ваши идеи

 substr="test"
if substr in df['result']:
    df.to_csv("C:/Projects/result.csv",sep=',',index=False)
  

Комментарии:

1. когда вы говорите, что не работает, вы имеете в виду, что он вообще не пишет или пишет неправильно?

2. Это не запись. Результат substr in df['result'] равен false

Ответ №1:

То, что «test_a_1» находится в списке, не означает, что «test» есть в логике Python.

Пример того, как Python оценивает операторы «if [string] in [list]»:

 >>> test = 'test1'
>>> testlist = ['test1', 'test2']
>>> if 'test' in test:
...     print('hi')
... 
hi
>>> if 'test' in testlist:
...     print('hi')
... 
>>>
  

Это сработало бы:

 substr="test"
for val in df['result']:
    if substr in val:
        # Do stuff
        # And optionally (if you only need one CSV per dataframe rather than one CSV per result):
        break
  

Комментарии:

1. Спасибо Iroh.. Это дает вывод для всех результирующих значений, но мне интересно увидеть test_a_1 , test_b_2 , test_b_3 строки в csv.

2. Похоже, решение scomes работает для этого, плюс это сексуальный однострочник. 😉

Ответ №2:

Если вы имеете в виду, что хотите создать csv, содержащий только строки, для которых результат начинается с ‘test’, используйте следующее:

 df[df.result.str.contains('^test.*')].to_csv("C:/Projects/result.csv",sep=',',index=False)
  

Ответ №3:

Это сработало бы :

 df['temp'] = [1 if 'test' in df['result'][k] for k in df.index else 0]
df['result'][df['temp']==1].to_csv("/your/path", sep=',', index=False)