astype强制转换不管用_将字符型的日期列转换为时间戳索引的方法

25a529602c69c51024c30256a41acde6.png

源数据:

e701e5d41b3a679b98bc218e39c32c6c.png

现在要求:

  • 把日期一列指定为索引列

  • 把日期一列用作索引时,类型需要是DatetimeIndex

同样的目的,可以有多种实现途径,只是先做哪一步后做哪一步、殊途同归而已。

  • 第一种方式,在导入数据时不指定过多条件,即不指定索引列、也不提前指定待用作索引列的数据类型。那么在导入后则需要先转换字符型日期列为时间戳类型,再进一步指定为索引列。

import numpy as npimport pandas as pdimport datetimedf=pd.read_excel('/Users/dxn/Desktop/发票2020.xlsx',header=0,                    usecols=range(0,5),dtype={'发票号码':'str'},                        skipfooter=1)#在导入数据时,就指定列的数据类型,跳过无效数据行是明智的。#df['发票号码'].astype('str')这种强制转换,在这里不适合df['日期']=pd.to_datetime(df['日期'])#把字符型的日期列解析为时间型的序列df.set_index('日期',drop=True,inplace=True)df=df.to_period('M').asfreq('A')#实现以年显示结果。前提条件是:索引是且必须是时间序列:DatetimeIndex#asfreq()应用前提条件是:索引时间序列为PeriodIndexdf=df.groupby('日期')['价税合计'].sum().reset_index()df.to_excel('/Users/dxn/Desktop/结果.xls')

bf1184b3afbc59aa93f7c2465317af29.png

  • 第二种方式,可以在导入数据时就指定待用作索引列的数据类型。

import numpy as npimport pandas as pdimport datetimedf=pd.read_excel('/Users/dxn/Desktop/发票2020.xlsx',header=0,    usecols=range(0,5),dtype={'发票号码':'str','日期':'datetime64'},       skipfooter=1)#df['日期']=pd.to_datetime(df['日期']),这一语句可以省略掉了df.set_index('日期',drop=True,inplace=True)df=df.to_period('A')df=df.groupby('日期')['价税合计'].sum().reset_index()df.to_excel('/Users/dxn/Desktop/结果.xls')

526844d60ec2a7f0fb306283e5fc1330.png

  • 第三种方式,在导入数据时就把拟用作索引列直接指定为索引,然后再转换数据类型。

import numpy as npimport pandas as pdimport datetimedf=pd.read_excel('/Users/dxn/Desktop/发票2020.xlsx',header=0,          usecols=range(0,5),index_col='日期',skipfooter=1                 dtype={'发票号码':'str'})#dtype={'发票号码':'str','日期':'datetime64'},这一语句日期列转换无效但不报错#df['日期']=pd.to_datetime(df['日期']),这一语句可以省略掉了#df.set_index('日期',drop=True,inplace=True),这一语句可以省略掉了df.index=pd.DatetimeIndex(df.index)#省略掉的两个语句,要以此句补上df=df.to_period('A')df=df.groupby('日期')['价税合计'].sum().reset_index()df.to_excel('/Users/dxn/Desktop/结果.xls')

aa7a2068902808bc0fc72d30ac54d9dd.png

  • 第四种方式,可以在直接转换数据类型的同时并指定为索引列。

import numpy as npimport pandas as pdimport datetimedf=pd.read_excel('/Users/dxn/Desktop/发票2020.xlsx',header=0,      usecols=range(0,5),dtype={'发票号码':'str'},skipfooter=1)df.index=pd.DatetimeIndex(df['日期'])#DatetimeIndex的问题是原来的日期列数据仍然会存在,形成重复列del df['日期']#需要把这一列删除得到正常数据df=df.to_period('A')df=df.groupby('日期')['价税合计'].sum().reset_index()df.to_excel('/Users/dxn/Desktop/结果.xls')

7eb093a71afd341fda86efd6259f724d.png

十一月已经到来,祝大家天天快乐!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值