利用python对数据时间转换过程中,datetime和pandas库中的时间函数区别与联系

数据格式如下:

利用python对数据时间转换过程中,datetime和pandas库中的时间函数区别与联系_第1张图片

首先我们先了解datetime库与pd时间序列的区别与联系 可以看下博文

https://blog.csdn.net/qq_24753293/article/details/80954840

 

首先不管是datetime中的strptime strftime 还是pandas中的pd.to_datetime 都需要对数据格式进行统一

即我们的  %Y-%m-%d %H:%M:%S 必须和我们数据一致才能转换。(由字符串变成时间格式必须统一符合,由时间转为字符串可以随意改成自己想要的格式。)

我们原始时间格式为:01-10月-18 04.03.16.705 上午

并没有一个合适的符号能够匹配秒以下的单位和上午这个单位 ,因此我们需要对数据进行处理一下 ,弄成符合转换标准的时间格式。

我们针对此字符串进行了以下转换:

DATE = "2018/10/18"
def change(data_time):             #处理时间格式
    list_time1=[]
    for x in data_time:
        if x[-2:] == '下午':
            time1 = DATE + ' ' + str(int(x[10:12])+12) + ':' + x[13:15] + ':' + x[16:18]
            list_time1.append(time1)
        else:
            time2 = DATE + ' ' + x[10:12] + ':' + x[13:15] + ':' + x[16:18]
            list_time1.append(time2)
    return list_time1

这样就可以弄成我们想要的格式。


df=pd.read_csv(r'C:\Users\Administrator\Desktop\ceshi.csv',encoding='gbk')
print(type(df['BILLTIME']))


change_time = change(df['BILLTIME']) # df['TIME']是pandas类型 处理的函数必须是遍历的形式 并不是一个具体的数
df["TIME_change"] = change_time


print(type(change_time))  #

print(type(df["TIME_change"]))#

同时我们注意,列表格式可以对series格式的进行赋值。

 

下面我们正式谈下datetime库和pandas的时间序列库的区别与联系了。

一,想把字符转换为时间列(一整列):

       第一种方法是利用pandas.to_datetime

df["TIME_change"] = pd.to_datetime(df["TIME_change"],format="%Y-%m-%d %H:%M:%S")

利用pd的时间序列函数 最大的好处是可以处理整个字段的数据 即,利用pd.to_datetime函数即可。

       第二种方法是利用datetime模块中datetime库中的strptime函数。此函数可以使字符类型变成时间格式。但是想要把整个字段全部转换,必须依赖apply函数和lambda函数 使每一行都转换过来。

df['TIME_change']=df['TIME_change'].apply(lambda x: datetime.datetime.strptime(x,"%Y/%m/%d %H:%M:%S"))

注:当str->datetime时 strptime,strftime必须有前缀datetime 。   datetime.strptime(x,"%Y/%m/%d %H:%M:%S")

       当datetime->str时  strptime,strftime可以没有前缀,时间格式的字段直接调用。x.strftime("%Y-%m-%d %H:%M:%S")

如果直接调用就会出现下面的报错。

df['TIME_change']=df['TIME_change'].apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))

AttributeError: 'str' object has no attribute 'strftime'

二,想把时间转为字符(一整列):

      这里主要是利用datetime库,和上面一样。时间转字符有个优点就是可以直接调用内置函数X.strptime的形式

df['TIME_change']=df['TIME_change'].apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))

      

 

你可能感兴趣的:(pandas,总结)