在月份和日期列中添加零时出错

时间:2020-06-17 09:29:23

标签: python pandas datetime

我的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 个答案:

答案 0 :(得分:1)

此错误是指split函数没有给您期望的三个值;年,月和日。如果您输入的x值不是您期望的值,那么将无济于事。

我怀疑您列中的值之一不具有您期望的y-m-d格式。或更准确地说,它的值少于3个,用“-”

分隔

尝试将split函数换行,并打印出该值以查看x的值是什么。

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

一旦我们确定了输入内容,便可以提出一种获取所需输出的方法。

答案 1 :(得分:1)

当您尝试在第二行拆分字符串输入时,发生错误。 可以很容易地以这种方式复制它:

>>> 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)

答案 2 :(得分:0)

其他答案说明了错误的来源-这是另一个选择,如何使用仅允许使用特定格式的字符串的正则表达式来“清理” df:

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
相关问题