pandas读取Excel批量转换时间戳的实践
问题描述
当我们使用pandas读取Excel文件时,会发现时间戳的类型为字符串,无法直接进行时间类型的运算,需要将其进行转换。如果Excel文件中包含许多时间戳,手动转换将会非常繁琐。因此,我们需要使用pandas来批量转换时间戳。
解决方案
步骤一:导入必要的库
读取Excel文件需要使用pandas库,时间类型转换需要使用datetime库。
import pandas as pd
from datetime import datetime
步骤二:读取Excel文件
使用pandas的read_excel
方法读取Excel文件,并将时间戳类型设置为字符串类型。
df = pd.read_excel('data.xlsx', dtype={'时间戳': str})
步骤三:时间戳转换
我们需要遍历Excel文件中的所有时间戳,并进行转换。这里我们使用pandas的apply
方法来实现。
def timestamp_to_datetime(timestamp):
return datetime.fromtimestamp(int(timestamp) / 1000)
df['时间'] = df['时间戳'].apply(timestamp_to_datetime)
上述代码中,timestamp_to_datetime
方法接受一个时间戳字符串类型参数,将其转换为时间类型,并返回时间类型变量。
apply
方法遍历'时间戳'列中的所有时间戳,并将其作为timestamp_to_datetime
方法的参数,将返回值写入'时间'列中。
步骤四:保存Excel文件
使用pandas的to_excel
方法保存修改后的Excel文件。
df.to_excel('data_new.xlsx', index=False)
上述代码中,我们将修改后的DataFrame保存为新的Excel文件'data_new.xlsx',并将原有索引列排除在外。
示例说明
示例一:时间戳格式为毫秒级时间戳
考虑如下Excel表格:
序号 | 时间戳 |
---|---|
1 | 1619572353668 |
2 | 1619572361748 |
3 | 1619572371394 |
4 | 1619572389190 |
我们将使用上述代码给出的方案来将时间戳转换为时间类型。转换结果如下:
序号 | 时间戳 | 时间 |
---|---|---|
1 | 1619572353668 | 2021-04-28 09:12:33.668000 |
2 | 1619572361748 | 2021-04-28 09:12:41.748000 |
3 | 1619572371394 | 2021-04-28 09:12:51.394000 |
4 | 1619572389190 | 2021-04-28 09:13:09.190000 |
在示例一中,我们的Excel文件中的时间戳格式为毫秒级时间戳,转换后的时间类型格式为带有微秒的日期时间。我们可以根据需求对转换结果进行格式化。
示例二:时间戳加入了时区信息
考虑如下Excel表格:
序号 | 时间戳 |
---|---|
1 | 2021-04-28T09:12:33.668000+08:00 |
2 | 2021-04-28T09:12:41.748000+08:00 |
3 | 2021-04-28T09:12:51.394000+08:00 |
4 | 2021-04-28T09:13:09.190000+08:00 |
在这个示例中,时间戳字符串中加入了时区信息'+08:00'。我们需要对此进行处理。
转换结果如下:
序号 | 时间戳 | 时间 |
---|---|---|
1 | 2021-04-28T09:12:33.668000+08:00 | 2021-04-28 09:12:33.668000 |
2 | 2021-04-28T09:12:41.748000+08:00 | 2021-04-28 09:12:41.748000 |
3 | 2021-04-28T09:12:51.394000+08:00 | 2021-04-28 09:12:51.394000 |
4 | 2021-04-28T09:13:09.190000+08:00 | 2021-04-28 09:13:09.190000 |
在示例二中,我们使用了pandas的默认时间戳转换方法,将时区信息忽略掉。在实际应用中,我们需要根据情况对时区信息进行处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas读取Excel批量转换时间戳的实践 - Python技术站