如何在Python中使用Pandas将指定格式时间戳转换为秒
问题描述
需要将格式为30/05/2022 13:05:48.360的时间戳转换为秒,现有代码如下:
def getDataset(self,csvfilename): dataset={} """remove NaN and set to 0""" df = pd.read_csv(csvfilename, encoding='utf-8').fillna(0) """name of headers in column""" list_columns = df.columns.values.tolist() """set time format""" time_format = '%d/%m/%Y %H:%M:%S.%f' for col in list_columns: dataset[col] = df[col].iloc[0:].values try: dataset[col] = [datetime.strptime(i, time_format) for i in df[col].iloc[0:].values] except Exception as e: pass print(e) return dataset,list_columns
尝试修改代码为dataset['Timestamp'] = df.loc[:,'Timestamp'].datetime.total_seconds()时,报错:'Series' object has no attribute 'datetime'。需求是仅将指定的Timestamp列时间转换为秒,其余列无需处理。
解决方案
错误原因
你之前的写法错误在于:Pandas的Series对象没有datetime属性,要处理时间序列,必须先把字符串转换成Pandas的时间类型,再基于参考时间计算总秒数。
正确实现
直接单独处理Timestamp列,其余列保留原有逻辑即可,修改后的代码如下:
from datetime import datetime import pandas as pd def getDataset(self, csvfilename): dataset = {} # 读取数据并填充NaN为0 df = pd.read_csv(csvfilename, encoding='utf-8').fillna(0) # 获取列名列表 list_columns = df.columns.values.tolist() # 时间格式定义 time_format = '%d/%m/%Y %H:%M:%S.%f' # 处理非Timestamp列,直接赋值 for col in list_columns: if col != 'Timestamp': dataset[col] = df[col].values # 单独处理Timestamp列 try: # 将字符串转换为Pandas datetime类型 timestamp_series = pd.to_datetime(df['Timestamp'], format=time_format) # 转换为UNIX时间戳(从1970-01-01开始的总秒数,包含小数) dataset['Timestamp'] = timestamp_series.sub(pd.Timestamp("1970-01-01")).dt.total_seconds().values # 若需要以列中第一个时间为基准计算相对秒数,替换为下面一行: # dataset['Timestamp'] = (timestamp_series - timestamp_series.iloc[0]).dt.total_seconds().values except Exception as e: print(f"处理Timestamp列出错: {e}") # 出错时保留原始值 dataset['Timestamp'] = df['Timestamp'].values return dataset, list_columns
关键说明
- 使用
pd.to_datetime()比手动循环调用datetime.strptime()效率更高,适合处理大数据集 sub(pd.Timestamp("1970-01-01"))用于计算当前时间与UNIX纪元的时间差,dt.total_seconds()将差值转换为总秒数- 单独拆分
Timestamp列的处理逻辑,避免循环中不必要的异常尝试,代码更清晰
内容的提问来源于stack exchange,提问作者HoneyWeGOTissues
相关产品推荐
相关产品推荐

