如何在 Pandas 中将 int64 转换为日期时间?

       处理数据集时,它们不一定是我们需要的格式。有时,甚至数字数据也可以以文本格式存储,而类似的实例可能会影响我们前进的速度,特别是当涉及大量数据时。有没有解决的办法?

本文试图通过演示特定案例的解决方案来回答这些问题,其中我们将数字转换为日期和时间格式。


我们将研究以下每个类别的int64数据到日期时间格式的转换。 

转换长日期
转换短日期
将日期与时间转换

要将 Pandas 中的 int64 转换为 Datetime,请使用 pd.to_datetime() 函数。

对于长日期 (YYYYMMDD),请使用格式“%Y%m%d”。

对于短日期 (YYMMDDD),请使用“%y%m%d”。

对于带有时间的日期 (YYMMDDHHMM),请使用“%y%m%d%H%M”。

调整格式参数以适合您的特定日期表示形式。

pandas库中的to_datetime ()函数将用于将int64数据转换为datetime。因此,让我们开始使用以下代码导入pandas库。 

import pandas as pd

 转换长日期 (YYYYMMDD)

该类别处理以int64格式的连续数字形式存储的日期。让我们仔细看看使用print函数打印以下数据集时会出现什么情况。

df1 = pd.DataFrame({'When?':[20200316, 20230517, 20210525, 20221219, 20191130],
                  'What?': ['Convocation', 'Exams End', 'Vacation starts', 'Tour', 'Party']})
print(df1)
print(df1.dtypes)

 从上图可以明显看出,数据类型是int64,并且很明显,该数据不是任何可以表示日期的常规方式。因此,是时候采取行动并使用to_datetime( )函数做一些事情了。

df1['When?'] = pd.to_datetime(df1['When?'],format = '%Y%m%d')
print(df1)
print(df1.dtypes)

转换短日期 (YYMMDD) 

有时,数字格式的日期也可以采用缩写形式,仅采用年份的两位数字而不是四位数字。当部署上一节中详细介绍的技术将这些值转换为日期时间格式时,这可能会带来问题。所以,这就是需要做的事情,对代码进行一些小的调整,我们就准备好了。

df = pd.DataFrame({'When?':[200316, 230517, 210525, 221219, 191130],
                  'What?': ['Convocation','Exams End','Vacation starts','Tour','Party']})
print(df)
print(df.dtypes)

这里的小调整是在to_datetime函数中用“%y”替换“%Y”,如下所示。

df['When?'] = pd.to_datetime(df['When?'],format = '%y%m%d')

将日期与时间转换 (YYMMDDHHMM) 

也可能存在日期与时间组合并一起列出的情况。从时间中筛选日期可能听起来像是一项艰巨的任务,但 Python 的情况并非如此。让我们通过下面的例子来看看如何解决这个问题。

df2 = pd.DataFrame({'When?':[2003161915, 2305171300, 2105250700, 2212191030,
                  1911302130], 'What?': ['Convocation', 'Exams End',
                                         'Vacation starts','Tour', 'Party']})
print(df2)
print(df2.dtypes)

 “When?”下每个值的最后四位数字 列对应 24 小时格式的时间。现在让我们将其与日期分开,同时使用to_datetime( )函数将数值转换为日期。包括“%H%M”以将时间与日期分开。

df2['When?'] = pd.to_datetime(df2['When?'],format = '%y%m%d%H%M')
print(df2)
print(df2.dtypes)

以上为转载如何在 Pandas 中将 int64 转换为日期时间? – 码微

以上出于学习转载,如有侵权可及时沟通

<think>好的,我现在需要解决用户的问题:如何在Python的Pandas中将多个列转换日期时间格式。让我先回忆一下相关的知识,并查看用户提供的引用内容是否有帮助。 首先,用户提到了几个引用,其中引用[1]和[2]涉及到Pandas的to_timestamp函数和创建DataFrame的例子,引用[4]提到了bdate_range函数。这可能与日期时间处理有关。但具体来说,用户的问题是关于转换多个列为日期时间格式。 我记得在Pandas中,常用的方法是使用pd.to_datetime()函数,或者DataFrame的applymap()方法。另外,可能还可以使用apply()函数对每一列应用转换。不过,用户可能需要更具体的步骤。 首先,用户可能需要同时处理多个列。例如,假设有一个DataFrame,其中多个列包含日期字符串,需要将它们转换为datetime类型。这时候,可以用apply()方法对每一列应用pd.to_datetime,或者使用df.astype(),不过后者可能不适用于字符串转换。 让我再仔细想想。假设数据框中有多列需要转换,比如'date1'、'date2'、'date3',那么可以循环这些列,对每个列应用pd.to_datetime。或者使用df[['col1','col2']].apply(pd.to_datetime),但需要确保这些列都能被正确转换。 用户提供的引用中,引用[2]展示了一个创建DataFrame的例子,其中日期列使用了pd.date_range生成,这可能是一个正确格式的例子。但用户的问题是如何将现有的多个列转换为datetime。例如,如果用户的数据中有多个列存储为字符串,如'2022-01-01',需要转换。 可能的步骤如下: 1. 确定需要转换的列名列表。 2. 对每个列应用pd.to_datetime函数。 3. 将转换后的结果赋值回原DataFrame的相应列。 例如,使用循环: cols_to_convert = ['col1', 'col2', 'col3'] for col in cols_to_convert: df[col] = pd.to_datetime(df[col]) 或者,使用apply: df[cols_to_convert] = df[cols_to_convert].apply(pd.to_datetime) 但需要注意,apply方法在这里是按列应用的,所以可能会有性能上的考虑,尤其当列数较多或数据量较大时。不过对于大多数情况来说,这应该没问题。 此外,pd.to_datetime的参数可能也很重要,比如处理错误的方式(errors参数),格式指定(format参数),或者时区处理等。比如,如果某些列的数据格式不一致,可能需要指定格式或处理错误,例如errors='coerce'可以将无法转换的值设为NaT。 例如: df[cols_to_convert] = df[cols_to_convert].apply(lambda x: pd.to_datetime(x, format='%Y-%m-%d', errors='coerce')) 但具体参数是否需要设置,取决于用户的数据情况。用户可能需要根据实际数据调整这些参数。 现在,查看用户提供的引用,引用[1]提到to_timestamp函数,但可能这个函数是用于将Period类型的转换时间戳,而pd.to_datetime更常用于字符串转换。因此,用户的问题应该使用pd.to_datetime。 所以,总结步骤: 1. 导入必要的库,比如pandas。 2. 读取或创建包含需要转换的列的DataFrame。 3. 确定需要转换的列名列表。 4. 使用apply方法或循环将这些列转换为datetime类型。 例如,用户可能有一个DataFrame如下: df = pd.DataFrame({ 'date1': ['2022-01-01', '2022-01-02'], 'date2': ['03-04-2022', '05-06-2022'], 'value': [10, 20] }) 要将date1和date2转换为datetime,可以: df[['date1', 'date2']] = df[['date1', 'date2']].apply(pd.to_datetime) 或者分别处理每个列,特别是当各列的日期格式不同时,比如date1是'%Y-%m-%d',而date2是'%d-%m-%Y',这时可能需要单独指定格式: df['date1'] = pd.to_datetime(df['date1'], format='%Y-%m-%d') df['date2'] = pd.to_datetime(df['date2'], format='%d-%m-%Y') 这种情况下,使用apply可能不太方便,需要单独处理。 所以,回答中需要说明这两种情况:当所有列的日期格式相同时,可以批量处理;如果不同,则需要单独处理,或者使用参数动态调整。 用户可能还需要处理错误的情况,比如无效的日期字符串,这时候errors='coerce'会很有用。 另外,用户提供的引用中有引用[4]提到了bdate_range,这可能和生成日期范围有关,但和转换多列为日期时间的关系不大,可能不需要特别关注。 综上所述,回答应该包括以下步骤: - 使用pd.to_datetime函数 - 批量处理多个列的方法(apply或循环) - 处理不同日期格式的情况 - 错误处理参数的使用 - 可能给出示例代码,如应用apply到多个列,或循环处理。 此外,用户提供的引用中的例子,如引用[2]中的df创建,可以作为一个例子,但需要调整到用户的问题上。比如,如何将多列转换为datetime。 现在,我需要将以上思考整理成结构化的回答,并生成相关问题。</think>在Python的Pandas中,将多个列转换日期时间格式可通过`pd.to_datetime()`函数结合批量处理实现。以下是具体方法: --- ### **步骤说明** 1. **导入库并创建示例数据** ```python import pandas as pd df = pd.DataFrame({ 'date_col1': ['2022-01-01', '2022-01-02'], 'date_col2': ['03/04/2022', '05/06/2022'], 'value': [10, 20] }) ``` 2. **批量转换多列** - **方法一:直接应用`pd.to_datetime`** ```python # 指定需转换的列名列表 date_columns = ['date_col1', 'date_col2'] df[date_columns] = df[date_columns].apply(pd.to_datetime) ``` 若列格式不同,需单独处理: ```python df['date_col1'] = pd.to_datetime(df['date_col1'], format='%Y-%m-%d') df['date_col2'] = pd.to_datetime(df['date_col2'], format='%d/%m/%Y') ``` - **方法二:循环处理** ```python for col in date_columns: df[col] = pd.to_datetime(df[col], errors='coerce') # 无效值转为NaT ``` 3. **验证结果** ```python print(df.dtypes) # 输出示例: # date_col1 datetime64[ns] # date_col2 datetime64[ns] # value int64 ``` --- ### **关键参数说明** - `format`:指定日期格式,如`%Y-%m-%d`; - `errors`:`'coerce'`(无效值转为NaT)或`'ignore'`(保留原值)[^1]; - 多列批量处理时优先使用`apply`,但需确保格式一致。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值