Заполнение столбца в кадре данных pandas с помощью вызова функции - PullRequest
0 голосов
/ 01 октября 2018

Как я могу использовать .loc с .str.match() для обновления значений столбцов, но с вызовом функции?Код, который я пробую, выглядит так:

df.loc[df['Col1'].str.match(r'\d\d/\d\d/\d\d\d\d', na=False), 'Col2'] = _my_func(df['Col1'])

простой шаблон регулярных выражений для поиска формата даты, а затем _myfunc();

def _my_func(data)
    for row in data.iteritems():
        day = int(row[1][:2])
        month = int(row[1][3:5])
        year = int(row[1][6:])
        fecha = datetime.datetime(year, month, day, 0, 0, 0)
        diff =  fecha - datetime.datetime.now()
        if diff.days > 0:
            return 'Yes'
        elif diff.days < 0:
            return 'No'

Это правильный способ возврата значенийиз функции в фрейм данных?

Также, если я вставлю print('test') в _my_func непосредственно перед return, он печатает test только один раз вместо печати для каждой строки данных, передаваемых в функцию,кто-нибудь знает почему?Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете попробовать его, используя функцию apply().

Например:

df['loc1'] = df['loc1'].apply(_my_func)

Тогда он будет принимать каждую строку кадра данных и передавать ее каквход в функцию _my_func.

0 голосов
/ 01 октября 2018

После моего комментария:

def _my_func(x):
    day = int(x[:2])
    month = int(x[3:5])
    year = int(x[6:])
    fecha = datetime.datetime(year, month, day, 0, 0, 0)
    diff = fecha - datetime.datetime.now()
    if diff.days > 0:
        return 'Yes'
    elif diff.days < 0:
        return 'No'

Далее:

df.loc[df['Col1'].str.match(r'\d\d/\d\d/\d\d\d\d', na=False), 'Col2'] = df['Col1'].apply(_my_func)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...