Как исправить «OSError: [Errno 22] неверный аргумент» дата и время Windows 10 - PullRequest
1 голос
/ 26 сентября 2019

Я работаю над постановкой задачи, в которой я должен представлять неправильную передачу данных в час.Я имею в виду https://www.kaggle.com/gpsaikrishna/credit-card-fraud-detection-smote-deep-learning только для представления данных.

Я попытался поместить данные в мой рабочий каталог.Все еще получаю ошибку ОС.Дата и время моей системы находятся на автоматическом обновлении с отключенным переходом на летнее время.И отформатирован как время: 24 часа;ЧЧ: мм и дата: ДД-ММ-ГГГГ

Ниже приведен код, который я пытаюсь запустить в своей системе из ядра Kaggle

def convert_totime(seconds):
    return datetime.datetime.fromtimestamp(seconds);

timeAnalysis = data[['Time', 'Amount', 'Class']].copy()
timeAnalysis['datetime'] = timeAnalysis.Time.apply(convert_totime)
timeDelta = datetime.datetime.utcnow() - datetime.datetime.now()
# As the max time is 172792 seconds and 172792 / (60*60) is about 48 hrs so we only have data for 2 days so only 
# plotting data against hours make sense
timeAnalysis['hour of the day'] = timeAnalysis.datetime + timeDelta
timeAnalysis['hour of the day'] = timeAnalysis['hour of the day'].dt.hour
timeAnalysisGrouped = timeAnalysis.groupby(['Class', 'hour of the day'])['Amount'].count()

Я получаю сообщение об ошибке

OSError                                   Traceback (most recent call last)
<ipython-input-77-002a1f9a93fc> in <module>()
      3 
      4 timeAnalysis = data[['Time', 'Amount', 'Class']].copy()
----> 5 timeAnalysis['datetime'] = timeAnalysis.Time.apply(convert_totime)
      6 timeDelta = datetime.datetime.utcnow() - datetime.datetime.now()
      7 # As the max time is 172792 seconds and 172792 / (60*60) is about 48 hrs so we only have data for 2 days so only

~\AppData\Local\conda\conda\envs\env\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
   3190             else:
   3191                 values = self.astype(object).values
-> 3192                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   3193 
   3194         if len(mapped) and isinstance(mapped[0], Series):

pandas/_libs/src\inference.pyx in pandas._libs.lib.map_infer()

<ipython-input-77-002a1f9a93fc> in convert_totime(seconds)
      1 def convert_totime(seconds):
----> 2     return datetime.datetime.fromtimestamp(seconds);
      3 
      4 timeAnalysis = data[['Time', 'Amount', 'Class']].copy()
      5 timeAnalysis['datetime'] = timeAnalysis.Time.apply(convert_totime)

OSError: [Errno 22] Invalid argument

Я ожидаю график количества транзакций мошенничества, используя приведенный ниже код:

plt.figure(figsize = (10, 6))
fraudTransactions = timeAnalysisGrouped[1].copy()
fraudTransactions.name = 'Number of transactions'
fraudTransactions.plot.bar(title = 'Number of fraud credit card transactions per hour', legend = True)

1 Ответ

0 голосов
/ 26 сентября 2019

Вы уже пробовали .map вместо .apply.Apply передает Series объекты в аргумент функции, а не сами элементы.Другими словами, вы обычно используете его, если работаете с «векторизованными» функциями.

Ваша функция работает с отдельными векторами, а не с сериями, и это проблема вашего кода.

Так что вы можете попробовать:

timeAnalysis.Time.map(convert_totime)

Это должно исправить вашу главнуюпроблема.Кроме того, вы также можете проверить, можете ли вы напрямую работать с более родными типами данных панд.Самый удобный способ сделать преобразование типов.Если вы еще не пробовали, вы можете проверить, правильно ли анализируются значения даты и времени с помощью встроенной логики numpy, например:

timeAnalysis.Time.astype('datetime64')

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

def convert_totime(series):
    return pd.to_datetime(series)

Если значения, которые вы хотите преобразовать, являются целыми числами, которые следует интерпретировать как секунды, вам нужно передать unit='s' в to_datetime.Если значения представлены в строковом формате, вам, вероятно, нужно использовать format= с соответствующей строкой формата.Смотрите здесь для получения дополнительной информации о функции: Описание pandas.to_datetime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...