我只是在自己学习熊猫,我遇到了一些问题。
在从csv文件读取的DataFrame中,我有一列包含日期数据,该日期数据的格式不同(例如'%m/%d/%Y'
和'%Y-%m-%d'
,可能为空。)并且我想统一此列的格式。但是我不知道是否还有其他格式。因此,当我使用pd.to_datetime()
时,它会出现一些错误,例如格式不匹配和数据不及时。如何统一此列的格式?
我已将该列的一部分转换为datetime dtype,它的格式为YYYY-mm-dd
。我可以保留datetime dtype并将格式更改为'%m/%d/%Y'
吗?我使用过pd.dt.strftime()
,它将更改格式,但还将dtype更改为str,而不保留datetime dtype。
答案 0 :(得分:2)
因此,当我使用pd.to_datetime()时,它引发了一些错误,例如格式不 匹配且不符合时间要求的数据。如何统一此格式 专栏?
使用errors='coerce'
选项为未转换的值返回NaT
(不是时间)。还要注意,format
参数不是必需的。省略它会使熊猫尝试多种格式,否则它将恢复为NaT
1 。例如:
df['datetime'] = pd.to_datetime(df['datetime'], errors='coerce')
当心,混合类型可能会被错误解释。例如,Python如何知道05/06/2018
是6月5日还是5月6日?将应用约定顺序,如果需要更好的控制,则需要自己应用自定义顺序。
我可以保留datetime dtype,并将格式更改为'%m /%d /%Y'吗?
不,您不能。 datetime
系列在内部存储为整数。任何人类可读的日期表示形式都是表示形式,而不是基础整数。要访问自定义格式,可以使用Pandas中可用的方法。您甚至可以将这样的文本表示形式存储在pd.Series
变量中:
formatted_dates = df['datetime'].dt.strftime('%m/%d/%Y')
dtype
中的formatted_dates
将是object
,这表明您系列的元素指向任意Python时间。在这种情况下,那些任意类型碰巧都是字符串。
最后,我强烈建议您不要将datetime
系列转换为字符串,直到工作流程的最后一步。这是因为,一旦您这样做,您将不再能够在这样的系列上使用高效的矢量化运算。
1 这会牺牲性能并与datetime.strptime
(需要要指定的格式)形成对比。在内部,Pandas使用dateutil
库,如docs所示。