Python pandas 特殊時間序列的生成

2021-10-09 08:53:57 字數 4225 閱讀 7626

date_range()函式是pandas庫的函式,顧名思義,該函式應該能生成指定區間的時間序列。

舉例:1、 使用「開始時間」和「結束時間」 生成2020-01-01至2020-01-07的7個日期

【指令碼】

print(pd.date_range(『20200101』, 『20200107』))

【結果】

datetimeindex([『2020-01-01』, 『2020-01-02』, 『2020-01-03』, 『2020-01-04』,

『2020-01-05』, 『2020-01-06』, 『2020-01-07』],

dtype=『datetime64[ns]』, freq=『d』)

【注意】

這的資料型別不是datetime,而是datetimeindex; freq預設為』d』

2、 使用「開始時間」和「期數」生成2020-01-01至2020-01-07的7個日期

【指令碼】

print(pd.date_range(『20200101』, periods=7))

3、 按月 使用「開始時間」和「期數」生成2020-01-31至2020-07-31的7個以月為間隔的日期(月底日)

【指令碼】

print(pd.date_range(『20200101』, periods=7, freq=『m』))

【結果】

datetimeindex([『2020-01-31』, 『2020-02-29』, 『2020-03-31』, 『2020-04-30』,

『2020-05-31』, 『2020-06-30』, 『2020-07-31』],

dtype=『datetime64[ns]』, freq=『m』)

4、 按月 使用「開始時間」和「期數」生成2020-01-01至2020-07-01的7個以月為間隔的日期(月初日)

【指令碼】

print(pd.date_range(『20200101』, periods=7, freq=『m』))

【結果】

datetimeindex([『2020-01-01』, 『2020-02-01』, 『2020-03-01』, 『2020-04-01』,

『2020-05-01』, 『2020-06-01』, 『2020-07-01』],

dtype=『datetime64[ns]』, freq=『ms』)

【注意】

這裡的「ms」不能寫成小寫,寫成小寫即以毫秒為時間間隔,等價於freq=『l』。結果為這樣:

datetimeindex([ 『2020-01-01 00:00:00』, 『2020-01-01 00:00:00.001000』,

『2020-01-01 00:00:00.002000』, 『2020-01-01 00:00:00.003000』,

『2020-01-01 00:00:00.004000』, 『2020-01-01 00:00:00.005000』,

『2020-01-01 00:00:00.006000』],

dtype=『datetime64[ns]』, freq=『l』)

5、 按月 使用「開始時間」和「期數」生成2020-01-31至2020-12-31的,每2個月為乙個間隔的日期

【指令碼】

print(pd.date_range(『20200101』, periods=6, freq=『2m』))

【結果】

runfile(『c:/users/zwy/pycharmprojects/firstpro/test.py』, wdir=『c:/users/zwy/pycharmprojects/firstpro』)

datetimeindex([『2020-01-31』, 『2020-03-31』, 『2020-05-31』, 『2020-07-31』,

『2020-09-30』, 『2020-11-30』],

dtype=『datetime64[ns]』, freq=『2m』)

6、 按1.5小時為間隔取數

【指令碼】

print(pd.date_range(『20200101』, periods=6, freq=『1h30min』))

【結果】

datetimeindex([『2020-01-01 00:00:00』, 『2020-01-01 01:30:00』,

『2020-01-01 03:00:00』, 『2020-01-01 04:30:00』,

『2020-01-01 06:00:00』, 『2020-01-01 07:30:00』],

dtype=『datetime64[ns]』, freq=『90t』)

【注意】

這裡的』1h30min』中間沒有冒號,等價於freq='90t '。結果為這樣:

試錯:print(pd.date_range(『202001』, periods=7, freq=『m』))

7、 怎樣得到時間間隔為乙個月的月份,而當是日期?

使用print(pd.date_range(『2020-01』, periods=6, freq=『m』))可以嗎?

不可以!

解決方案:按個函式pd.period_range

1、 得到時間間隔為乙個月的6期月份

【指令碼】

print(pd.period_range(『2020-01』, 『2020-06』, freq=『m』))

【結果】

periodindex([『2020-01』, 『2020-02』, 『2020-03』, 『2020-04』, 『2020-05』, 『2020-06』], dtype=『period[m]』, freq=『m』)

【注意】

1、這裡的資料型別變了,變成了periodindex,可以大膽地想一下,這個以時間段為範圍的序列,是否可以使用以「年」、『季度「為間隔的時間序列呢? 也可以的!

該函式會生成一些指定的不規則的時間段序列,注意函式字母的大小寫。

如:values = [『202001』, 『202003』, 『202002』, 『202008』]

print(pd.periodindex(values, freq=『m』))

1、 生成乙個間隔不均勻地季度時間序列

【指令碼】

values = [『2020q1』, 『2020q3』, 『2020q2』, 『2019q3』]

print(pd.periodindex(values, freq=『q』))

【結果】

periodindex([『2020q1』, 『2020q3』, 『2020q2』, 『2019q3』], dtype=『period[q-dec]』, freq=『q-dec』)

2、 轉換類:把一組月份轉換成對應的季度

【指令碼】

values = [『2020-01』, 『2020-03』, 『2020-04』, 『2019-05』, 『2020-08』, 『2020-12』]

print(pd.periodindex(values, freq=『q』))

【結果】

periodindex([『2020q1』, 『2020q1』, 『2020q2』, 『2019q2』, 『2020q3』, 『2020q4』], dtype=『period[q-dec]』, freq=『q-dec』)

【注意】

這裡注意,values不能再設定為『202001『格式,而需要設定為『2020-01』

3、 指定年月的時間序列

【指令碼】

year = [『2020』, 『2019』, 『2020』]

month = [『01』, 『2』, 『3』]

print(pd.periodindex(year,month, freq=『m』))

【結果】

periodindex([『2020-01』, 『2019-01』, 『2020-01』], dtype=『period[m]』, freq=『m』)

date_range(),period_range()函式生成序列時,都有兩種方法,一是(start, end, periods);一是(start, periods,freq)。而periodindex()函式生成時間序列時稍顯靈活,可以通過指定時間值,指定freq方法來生成。

關於freq,在不同函式中意義不同,我找到的資料如下:

(下圖**

Python pandas,建立Series型別

numpy只能處理數值型別的資料。pandas除了可以處理數值型別外,還可以處理非數值型別的資料 例如 字串 時間序列等 pandas常用的資料型別 series 一維,帶標籤的陣列,對應資料庫中的一條記錄 dataframe 二維,series容器,對應資料庫中的表 demo.py series的...

python pandas使用記錄

在使用numpy中array格式的矩陣時,我們通常使用如a 2 4,5 10 獲取陣列中一部分資料,但是dataframe結構的陣列就不能這麼寫,可以使用iloc方法,即index locate,另外有個相似的方法loc,這個方法是通過column名字進行資料定位的 import pandas as...

Python pandas總結未完

obj.index obj.values obj4.name population obj4.index.name state obj.index bob steve jeff ryan data frame pd.dataframe data frame2 pd.dataframe data,co...