Ошибка при добавлении нулей в столбцы месяца и даты - PullRequest
0 голосов
/ 17 июня 2020

У меня есть значения столбца Date как 2020-6-10,2020-6-9 и так далее. Мне нужно добавить нули, если число в месяце или дате меньше 10. Я попробовал приведенный ниже код, но получаю сообщение об ошибке. Может кто-нибудь сказать мне, что я получаю это? Есть ли способ лучше. Мне нужно изменить значения в столбце «Дата».

for x in df['Date']:
    y,m,d = x.split('-')
    m = m.zfill(2)       
    d = d.zfill(2)
    x = y + "-" + m + "-" + d 

Ошибка = недостаточно значений для распаковки (ожидается 3, получено 1)

Ответы [ 3 ]

1 голос
/ 17 июня 2020

Ошибка возникает, когда вы пытаетесь разделить ввод строки во второй строке. Его можно легко воспроизвести следующим образом:

>>> y,m,d='aaaaaa'.split('-')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 1)

Вам нужно будет добавить блок try-catch для захвата тех входных данных, которые не представляют действительные даты. Например:

>>> try:
...     y,m,d='aaaaaa'.split('-')
... except ValueError:
...     return ''

Вы также можете выполнить некоторую предварительную обработку вашего Pandas фрейма данных перед вызовом этих операторов:

>>> df.dropna(subset=['Date'], inplace=True)

Вы также можете заполнить отсутствующие значения с помощью заполнителя:

>>> df['Date'].replace('', '01-01-2020', inplace=True)
1 голос
/ 17 июня 2020

Эта ошибка говорит о том, что функция разделения не дает вам трех ожидаемых значений; год, месяц и число. Если ваше входное значение x не то, что вы ожидаете, ничего не будет работать.

Я подозреваю, что одно из значений в вашем столбце не имеет ожидаемого вами формата ymd. Или, точнее, он имеет менее 3 значений, разделенных «-»

Оберните функцию разделения в try except и распечатайте значение, чтобы увидеть, какое значение x нарушается.

try:
  y,m,d = x.split('-')
except ValueError:
  print(“This input does not split: %s”, x)

Как только мы будем уверены в входных данных, мы сможем найти способ получить нужные вам выходные данные.

0 голосов
/ 17 июня 2020

другие ответы объясняют, откуда возникает ошибка - вот еще один вариант, как «очистить» df, используя регулярное выражение, которое допускает только строки с определенным форматом c:

import pandas as pd
# example df with invalid strings in Date col:
df = pd.DataFrame({'Date': ['2020-6-10','2020-6-9','','rubbish']})
# filter df to contain valid dates only
df = df[df['Date'].str.contains('[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}')]
# df
#         Date
# 0  2020-6-10
# 1   2020-6-9

# now change date format using strftime:
df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y-%m-%d')
# df['Date']
# 0    2020-06-10
# 1    2020-06-09
# Name: Date, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...