Настраивая необычный формат в DataFrame, функция продолжает возвращать None - PullRequest
1 голос
/ 23 мая 2019

У меня есть фрейм данных pandas, и я запускаю эту функцию для настройки формата времени.Время отформатировано уникальными способами с некоторыми значениями мусора.

Я пробовал разные операторы возврата, назначая разные значения, чтобы понять, как это работает, и просмотрел всю документацию, но все еще не могу понять, почему эта функция продолжает возвращать None.

df = pd.DataFrame({violation_time: ['+.98P','1037A', '0231P', '1206A', 
'0315P', '7824A']}

def time_converter(times):
    """Converts format of violation_time from HHMMP and HHMMA to datetime, assigns NaN"""
    try:
        for element in times:
            if element[-1] == 'A':
                hour = int(element[0:2])
                minutes = int(element[2:4])  
                result = datetime.time(hour, minutes)
            elif element[-1] =='P':
                hour = int(element[0:2]) + 12
                minutes = int(element[2:4]) 
                result = datetime.time(hour, minutes)
            else:
                result = 'NaN' 
        return result
    except ValueError:
        'NaN'


df['time'] = df.violation_time.apply(time_converter)    

Я ожидаю, что новая серия будет исключена со значениями мусора и отформатирована так: [10: 37,02: 31, 00:26, 15:15] Я могу получить эти значения вне панд, добавив в списки, какотличается от панд?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Это правильный результат следующим образом:

  violation_time      time
0          +.98P      None
1          1037A  10:37:00
2          0231P  14:31:00
3          1206A  12:06:00
4          0315P  15:15:00
5          7824A      None

Я применил lambda как df.violation_time.apply(lambda x: time_converter(x)). И вам не нужно for loop в time_converter функции.

Пожалуйста, смотрите полный код следующим образом:

import datetime as datetime
import pandas as pd

df = pd.DataFrame({'violation_time': ['+.98P','1037A', '0231P', '1206A', '0315P', '7824A']})

def time_converter(times):
    """Converts format of violation_time from HHMMP and HHMMA to datetime, assigns NaN"""
    try:
        element = times
        if element[-1] == 'A':
            hour = int(element[0:2])
            minutes = int(element[2:4])  
            result = datetime.time(hour, minutes)
        elif element[-1] =='P':
            hour = int(element[0:2]) + 12
            minutes = int(element[2:4]) 
            result = datetime.time(hour, minutes)
        else:
            result = 'NaN' 
        return result
    except ValueError:
        'NaN'


df['time'] = df.violation_time.apply(lambda x: time_converter(x))  
print (df)
1 голос
/ 23 мая 2019

Вы должны попробовать:

df = pd.DataFrame({violation_time: ['+.98P','1037A', '0231P', '1206A', 
'0315P', '7824A']})

def time_converter(time):
    """Converts format of violation_time from HHMMP and HHMMA to datetime, assigns NaN"""
    try:
        if time[-1] == 'A':
            hour = int(time[0:2])
            minutes = int(time[2:4])  
            result = datetime.time(hour, minutes)
        elif time[-1] =='P':
            hour = int(time[0:2]) + 12
            minutes = int(time[2:4]) 
            result = datetime.time(hour, minutes)
        else:
            result = 'NaN' 
        return result
  except ValueError:
       'NaN'


df['time'] = df.violation_time.apply(time_converter) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...