pandas 读CSV时间转换问题的终极解决

关于pandas 读CSV遇到时间戳的转换(不会缺失精度)

关于pandas 读CSV遇到object类型的时间的转换(不会缺失精度)

pandas 读CSV遇到时间戳的转换时间字符串

        

# 时间戳转时间字符串   timestemp--转--object   
def stamp2time(timestamp):  # 时间戳转日期函数
    time_local = time.localtime(timestamp / 1000)
    dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
    return dt

df = pd.read_csv("data.csv")
df["timestamp"] = df["timestamp"].apply(stamp2time)
pirnt(df.info())

        现在的时间列变成了object(也就是pandas中字符串)格式

         

 pandas普通时间字符串转换成datetime时间格式

# object--转--datetime64
df['timestamp'] = pd.to_datetime(df['timestamp'])

         经过to_datetime函数后的字段从object格式转换为datetime64格式

        

 pandas时间字符串转换成datetime时间格式(不会丢失精度)

丢失精度的问题 

        一般的情况下objec转datetime只需要使用to_datetime即可,然而有的时候会发现,对于有些CSV文件这样做会使转换后的时间与愿时间不对照,也就是发生了精度的丢失。

        例如:当前的时间是这样的

         经过to_datetime之后变成了这样

        可以发现时间列与原数据发生了变化,猝不及防的bug产生了!!!

解决办法

from dateutil.parser import parse

df_pre = pd.read_csv("data.csv")
# 这种方式转化时间不会丢失精度  object---转---datetime64
df_pre['timestamp'] = df_pre['timestamp'].apply(parse)
print(df_pre.info())
print(df_pre)

 这样就可以解决丢失精度的问题,转换后的时间格式一致:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值