[英]extract the day in a specific format from a date_range
我想從帶有日期的列表中獲取僅包含“天”的列表。 我使用pd.date_range
生成了日期,然后將其轉換為字符串。
date = '20170101'
fecha = pd.date_range(date , periods = 6, freq = 'D')
fecha = pd.Series(fecha.format())
print fecha[2][8:10]
for i in fecha:
print fecha[i][8:10]
這會引發KeyError: '2017-01-01'
根據我的理解,這個for loop
應該遍歷列表並獲得當天的2位數字。
我這樣做的原因是因為我需要使用'2017-4-4'
格式創建日期(因此,低於10的數字只有一位數字)
有人可以幫忙嗎?
謝謝
您可以通過創建一個日期海峽dt.strftime
,然后轉換為str
使用astype(str)
然后拆分上'-'
轉換為int
擺脫的龍頭0
,你再轉換回str
,所以我們可以再加入datetime組件又重新組合在一起:
In [105]:
new_fecha = fecha.dt.strftime('%Y-%m-%d').str.split('-',expand=True).astype(int).astype(str)
new_fecha[0] + '-' + new_fecha[1] + '-' + new_fecha[2]
Out[105]:
0 2017-1-1
1 2017-1-2
2 2017-1-3
3 2017-1-4
4 2017-1-5
5 2017-1-6
dtype: object
看來您的fecha
是不需要.dt
的DatetimeIndex
:
new_fecha = fecha.strftime('%Y-%m-%d').str.split('-',expand=True).astype(int).astype(str)
所以上面應該工作
您正在嘗試訪問fecha
中不存在的密鑰。 這發生在:
for i in fecha:
print fecha[i][8:10]
(可能在這里:也print fecha[2][8:10]
)
原因是i
不是fetcha
的索引,而是其中的一個項目。
更改為:
for i in fecha:
print i[8:10]
要么
for i in range(len(fecha)):
print fecha[i][8:10]
修復很簡單,但是我將嘗試解釋您所做的事情。
您創建了一個名為fecha
的變量,它是一個pandas.Series
對象,其索引范圍為0
到5
,其值是類似於日期的字符串:
print(fecha)
0 2017-01-01
1 2017-01-02
2 2017-01-03
3 2017-01-04
4 2017-01-05
5 2017-01-06
dtype: object
# ^
# Notice dtype object. Usually indicative of strings.
現在,當您使用for
循環進行迭代時,是否要遍歷索引? 還是價值觀? 換句話說,什么是i
?
讓我們打印看看
for i in fecha:
print(i)
2017-01-01
2017-01-02
2017-01-03
2017-01-04
2017-01-05
2017-01-06
哈啊! 這些是字符串值,而不是索引。 好的,現在我們知道了,我們可以解釋為什么fecha[i]
不起作用。 這是因為pandas.Series
上的[]
會嘗試從索引為i
fecha
獲取值。 但! i
是值而不是索引。
以下是解決此問題的多種方法:
選項1
for i in fecha:
print(i[8:10])
01
02
03
04
05
06
選項2
iteritems
for i, v in fecha.iteritems():
print(fecha[i][8:10])
01
02
03
04
05
06
選項3
.strftime
也請參閱此鏈接以獲取strftime
跳過系列對象並從日期時間索引打印
for d in pd.date_range(date, periods=6):
print(d.strftime('%d'))
01
02
03
04
05
06
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.