python 讀取yyyy-mm-dd 日期.md

python 讀取yyyy-mm-dd 日期

問題解決

在對“上證指數”數據進行處理的過程中,遇到了利用 numpy 讀取YYYY-MM-DD 格式的問題。

在這裏插入圖片描述

對於%m%d%Y 格式的日期,可利用matplotlib.dates.strpdate2num('%m%d%Y') 進行處理。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

date,open,close=np.loadtxt('000001.csv',delimiter=',',converters={0:mdates.strpdate2num('%m%d%Y')},skiprows=1,usecols=(0,3,6),unpack=True)

對於%Y-%m-%d 格式的日期,需要事先創建一個映射函數,將時間轉換爲浮點數,並在np.loadtxt() 中的 converters 中進行使用。

import numpy as np
import matplotlib.pyplot as plt
import datetime
import time

#def convert_to_tic(s):
#    return time.mktime(datetime.datetime.strptime(s.decode('ascii'), "%Y-%m-%d").timetuple())

def datestring2num(s):
    return mdates.datestr2num(s.decode('ascii'))

date, close, open = np.loadtxt('000001.csv', delimiter=',', converters={0: datestring2num}, skiprows=1, usecols=(0, 3, 6), unpack=True)  # 將日期進行轉化

plt.plot(date, open)
plt.show()

報錯分析

  1. 在使用datetime.datetime.strptime(s, "%Y-%m-%d"),若s後不進行解碼操作,在調用過程中會出現如下報錯:

源碼如下:

def convert_to_tic(s):
    return time.mktime(datetime.datetime.strptime(s, "%Y-%m-%d").timetuple())

dates=np.loadtxt('data.csv', delimiter=',', usecols=(0,), converters={1: convert_to_tic}, unpack=True)

報錯:

TypeError: strptime() argument 1 must be str, not bytes

  1. 源碼如下:
def datestring2num(s):
    return mdates.datestr2num(s)

dates=np.loadtxt('data.csv', delimiter=',', usecols=(0,), converters={1: datestring2num}, unpack=True)

報錯:

AttributeError: 'numpy.ndarray' object has no attribute 'toordinal'

這是因爲我們是以二進制編碼的格式打開第一列值,返回的值字節字符串bytes,所以需要把它編譯回string,則對字符串解碼用函數decode('ascii'),變成string格式。

參考鏈接

[1] 關於TypeError: strptime() argument 1 must be str, not bytes解析

[2] Numpy 常用函數及讀寫操作

[3] Convert date column in dataframe to ticks in python

[4] python datetime 字符串 時間戳

[5] python docs - [datetime](https://docs.python.org/3/library/datetime.html?highlight=time strptime#module-datetime) — Basic date and time types

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章