Получение ошибки при использовании apply on list python - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть фрейм данных, в котором столбец txt содержит список.Я хочу очистить столбец txt с помощью функции clean_text ().

data = {'value':['abc.txt', 'cda.txt'], 'txt':['['2019/01/31-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart']',
                                               '['2019/02/01-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart']']}
df = pandas.DataFrame(data=data)
    df
 value    txt
 abc.txt  ['2019/01/31-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart']
 cda.txt  ['2019/02/01-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart']
def clean_text(text):
    """
    :param text:  it is the plain text
    :return: cleaned text
    """
    patterns = [r"^.{53}",
                r"[A-Za-z]+[\d]+[\w]*|[\d]+[A-Za-z]+[\w]*",
                r"[-=/':,?${}\[\]-_()>.~" ";+]"]

    for p in patterns:
        text = re.sub(p, '', text)

    return text

Мое решение :

df['txt'] = df['txt'].apply(lambda x: clean_text(x))

Но я получаю ошибку ниже: Ошибка

df['txt'] = df['txt'].apply(lambda x: clean_text(x))
AttributeError: 'list' object has no attribute 'apply'



clean_text(df['txt'][1]
TypeError: expected string or bytes-like object

Я не уверен, как использовать numpy.where в этой проблеме.

1 Ответ

0 голосов
/ 11 февраля 2019

Исходя из пересмотра вашего вопроса и обсуждения в комментариях, я считаю, что вам нужно использовать следующую строку:

df['txt'] = df['txt'].apply(lambda x: [clean_text(z) for z in x])

В этом подходе apply используется с lambda дляЗацикливание каждого элемента серии txt, в то время как простой цикл for (выраженный с использованием списка Python) используется для перебора каждого элемента в подсписке txt.

Я протестировал этот фрагментсо следующим значением для data:

data = {
    'value': [
        'abc.txt',
        'cda.txt',
    ],
    'txt':[
        [
            '2019/01/31-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart',
        ],
        [
            '2019/02/01-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart',
        ],
    ]
}

Ниже приведен фрагмент консольного вывода, показывающий кадр данных до и после преобразования:

>>> df

     value                                                txt
0  abc.txt  [2019/01/31-11:56:23.288258 1886     7F0ED4CDC...
1  cda.txt  [2019/02/01-11:56:23.288258 1886     7F0ED4CDC...

>>> df['txt'] = df['txt'].apply(lambda x: [clean_text(z) for z in x])

>>> df

     value                         txt
0  abc.txt  [asfasnfs remove datepart]
1  cda.txt  [asfasnfs remove datepart]
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...