Python 从日期范围中以特定格式提取日期
我想从这个有日期的列表中得到一个只有“天”的列表。我使用Python 从日期范围中以特定格式提取日期,python,date,pandas,Python,Date,Pandas,我想从这个有日期的列表中得到一个只有“天”的列表。我使用pd.date\u 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] 这会抛出键错误:“2017-01-01”
pd.date\u 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]
这会抛出键错误:“2017-01-01”
据我所知,循环的应该迭代列表,得到当天的2位数。
我之所以这样做是因为我需要用这种格式创建日期'2017-4-4'
(因此10以下的数字只有一位)
有人能帮忙吗?
谢谢您可以使用dt.strftime
创建一个datetime str,然后使用astype(str)
转换为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
是一个DatetimeIndex
这不需要.dt
:
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]
(也可能在这里:打印fecha[2][8:10]
)
原因是i
不是fetcha
的索引,而是其中的一项
将其更改为:
for i in fecha:
print 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选项3
跳过series对象并从datetime索引打印
谢谢你的回答,所以当我做
Fecha[I][8:10]
时,我调用的是索引[2]中的值,这就是为什么当我把它放在for循环中时它不起作用的原因fecha[i]
在fecha.index
中查找i
,但是,i
是值本身,不在索引中i
接受这些值,因为您迭代了fecha
。我的答案给出了各种适当迭代和引用的方法。我尝试了这段代码,但是我得到了错误:AttributeError:'DatetimeIndex'对象没有属性'dt'
删除.dt
:新建fecha=fecha.strftime(“%Y-%m-%d”).str.split('-',expand=True)。astype(int)。astype(str)
for i in fecha:
print(i[8:10])
01
02
03
04
05
06
for i, v in fecha.iteritems():
print(fecha[i][8:10])
01
02
03
04
05
06
for d in pd.date_range(date, periods=6):
print(d.strftime('%d'))
01
02
03
04
05
06