Data Science

Pandas日期时间转换技巧:高效数据处理

Spread the love

Pandas是一个强大的Python库,用于数据处理和分析。处理日期和时间是一项常见任务,通常,您的数据可能包含字符串或其他非日期时间格式的日期和时间信息。本文演示了几种将Pandas DataFrame列转换为日期时间数据类型的有效技术,从而使时间序列分析和处理变得更加容易。

目录:

  1. 使用pd.to_datetime()高效转换日期时间
  2. 使用apply()处理复杂格式
  3. 同时转换多个列
  4. 使用astype()进行简单转换

1. 使用pd.to_datetime()高效转换日期时间

最直接且推荐的方法是使用pd.to_datetime()函数。此函数非常通用,能够处理各种各样的日期和时间格式。


import pandas as pd

data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)

# 将'date_str'列转换为日期时间
df['date'] = pd.to_datetime(df['date_str'])

print(df)
print(df.dtypes)

此代码片段创建一个包含日期字符串列的DataFrame。pd.to_datetime()自动推断格式并将字符串转换为日期时间对象。dtypes输出确认转换成功。pd.to_datetime()还处理包含时间成分的格式,并通过errors参数(例如,将无效日期替换为NaT的’coerce’)提供错误处理。

2. 使用apply()处理复杂格式

apply()方法提供了增强的灵活性,尤其是在处理复杂的日期格式或自定义解析逻辑时。


import pandas as pd

data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024']}
df = pd.DataFrame(data)

# 自定义函数来解析日期字符串
def parse_date(date_str):
    return pd.to_datetime(date_str, format='%b %d, %Y')

df['date'] = df['date_str'].apply(parse_date)

print(df)
print(df.dtypes)

在这里,定义了一个自定义函数parse_date来处理特定的日期格式。apply()方法将此函数应用于’date_str’列中的每个元素。当处理不一致的日期格式或需要特殊处理时,此方法非常有用。

3. 同时转换多个列

apply()方法可以扩展为同时转换多个列。


import pandas as pd

data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024'],
        'time_str': ['10:00:00', '12:30:00', '14:45:00']}
df = pd.DataFrame(data)

def parse_date_time(row):
    return pd.to_datetime(row['date_str'] + ' ' + row['time_str'], format='%b %d, %Y %H:%M:%S')

df['datetime'] = df.apply(parse_date_time, axis=1)

print(df)
print(df.dtypes)

此示例组合了来自不同列的日期和时间字符串。apply()中的axis=1参数表示按行应用函数。

4. 使用astype()进行简单转换

astype()方法提供了一种简洁的转换方法,但它不如pd.to_datetime()灵活。当您的日期已采用Pandas可以直接解释的格式时,它最有效。


import pandas as pd

data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date_str']) #首先使用pd.to_datetime转换位datetime对象以获得灵活性
df['date'] = df['date'].astype('datetime64[ns]') #现在可以使用astype

print(df)
print(df.dtypes)

虽然astype提供了直接转换,但由于其卓越的错误处理和格式灵活性,通常更推荐使用pd.to_datetime。请注意,在应用astype之前,需要使用pd.to_datetime进行初步转换;否则,将会发生错误。

最佳方法取决于数据的复杂性和具体需求。对于大多数情况,pd.to_datetime()提供了效率和灵活性的最佳平衡。但是,当需要时,apply()方法提供自定义函数功能,而astype对于数据已采用适当格式的简单情况是一种简洁的解决方案。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注