У меня была аналогичная проблема , основанная на комментарии, я использовал следующий синтаксис для решения перед токенизацией:
clean_text_ddf.where(col("title").isNull()).show()
cleaned_text=clean_text_ddf.na.drop(subset=["title"])
cleaned_text.where(col("title").isNull()).show()
cleaned_text.printSchema()
cleaned_text.show(2)
+-----+
|title|
+-----+
+-----+
+-----+
|title|
+-----+
+-----+
root
|-- title: string (nullable = true)
+--------------------+
| title|
+--------------------+
|Mr. Beautiful (Up...|
|House of Ravens (...|
+--------------------+
only showing top 2 rows
Используйте itertools.dropwhile
с обоих концов:
from itertools import dropwhile
input_data = ["0", "0", "1", "1", "0", "0", "1", "0", "1", "0", "0", "0"]
def predicate(x):
return x == '0'
result = list(dropwhile(predicate, list(dropwhile(predicate, input_data))[::-1]))[::-1]
result
Выход:
['1', '1', '0', '0', '1', '0', '1']
Нет метода списка, но нетрудно реализовать такую функцию: отсканируйте нужные индексы, а затем нарезайте их.
def strip_seq(predicate, xs):
def scan(xs):
return next((i for i, x in enumerate(xs) if not predicate(x)), 0)
return xs[scan(xs) : -scan(reversed(xs)) or None]
xs = ["0", "0", "a", "1", "0", "0", "1", "0", "b", "0", "0", "0"]
print(strip_seq(lambda x: x=='0', xs)) # ['a', '1', '0', '0', '1', '0', 'b']
Это должно работать с любыми типами последовательностей, включая строки и кортежи.
Вы можете сделать правую полоску с помощью while / pop.
input = ["0", "0", "1", "1", "0", "0", "1", "0", "1", "0", "0", "0"]
while input and input[-1] == "0": input.pop()
Вы можете левую полосу с itertools.dropwhile
, но вам, возможно, придется составить новый список.
from itertools import dropwhile
input = [*dropwhile(lambda x: x=='0', input)]
Или вы можете эффективно использовать / выталкивать с обоих концов, превращая в деку.
from collections import deque
input = ["0", "0", "1", "1", "0", "0", "1", "0", "1", "0", "0", "0"]
input = deque(input)
while input and input[-1] == '0': input.pop()
while input and input[0] == '0': input.popleft()
(Также input()
уже является встроенной функцией, поэтому лучше не использовать это имя для переменных.)
Нет встроенного метода. Вы можете использовать itertools.dropwhile
для удаления влево. Удаление правого угла возможно при использовании функции генератора.
import itertools as it
stripleft = list(it.dropwhile(lambda x: x==myitem, inputlist))