【问题标题】:pd.todatetime() ValueError: unconverted data remains: 9pd.to_datetime() ValueError:未转换的数据仍然存在:9
【发布时间】:2020-08-06 15:06:54
【问题描述】:

使用下面的代码和数据,第一次不起作用并重新运行 File "pandas\_libs\tslibs\strptime.pyx", line 148, in pandas._libs.tslibs.strptime.array_strptime ValueError: unconverted data remains: 9

这是我的代码。问题出在哪里?

顺便说一句,python3.8 和熊猫 1.0.1

df = pd.read_csv()
print(df.process_time.unique().tolist())
df['process_time'] = pd.to_datetime(df.process_time, format='%Y%m%d')
"""
# result of print(df.process_time.unique().tolist())
[20200401, 20200402, 20200403, 20200404, 20200405, 20200406, 
20200407, 20200408, 20200409, 20200410, 20200411, 20200412, 
20200413, 20200414, 20200415, 20200416, 20200417, 20200418, 
20200419, 20200420, 20200421, 20200422, 20200423, 20200424, 
20200425, 20200426, 20200427, 20200428, 20200429, 20200430, 
20200469, 20200501, 20200502, 20200503, 20200504, 20200505, 
20200506, 20200507, 20200508, 20200509, 20200510, 20200511, 
20200512, 20200513, 20200514, 20200515, 20200516, 20200517, 
20200518, 20200519, 20200520, 20200521, 20200522, 20200523, 
20200524, 20200525, 20200526, 20200527, 20200528, 20200529, 
20200530, 20200531, 20200601, 20200602, 20200603, 20200604, 
20200605, 20200606, 20200607, 20200608, 20200609, 20200610, 
20200611, 20200612, 20200613, 20200614, 20200615, 20200616, 
20200617, 20200618, 20200619, 20200620, 20200621, 20200622, 
20200623, 20200624, 20200625, 20200626, 20200627, 20200628, 
20200629, 20200630]
"""

【问题讨论】:

  • 如果这是一个 DB 问题,请确保在将条目传递给 pd.to_datetime... 之前检查条目的有效性,或者将转换包装在 try/except 中并将 NaT 作为输出如果遇到ValueError

标签: python pandas datetime string-to-datetime


【解决方案1】:

您的列表中有一个有问题的日期:20200469 无法解析正确的日期编号。确实 69 > 31,所以我的猜测是:20200469 被削减为 2020046 并被理解为 2020 年 4 月 6 日,因此无法理解 9,因此出现错误!

因此,您可能需要更正此数据点(或删除它),它会起作用:

df.process_time = df.process_time.replace(20200469, 20200429)  # 69 -> 29 or 19 or 09
print(pd.to_datetime(df.process_time, format='%Y%m%d'))

输出:

0    2020-04-01
1    2020-04-02
2    2020-04-03
3    2020-04-04
4    2020-04-05
        ...    
87   2020-06-26
88   2020-06-27
89   2020-06-28
90   2020-06-29
91   2020-06-30
Name: process_time, Length: 92, dtype: datetime64[ns]

【讨论】:

  • 非常感谢!我以为是代码问题,结果是数据库问题。
  • 不客气 :-) 如果对您有帮助,请随时接受答案。
猜你喜欢
  • 2020-04-25
  • 2020-03-29
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多