Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换日期时间列_Python_Python 3.x_Pandas_Date_Datetime - Fatal编程技术网

Python 转换日期时间列

Python 转换日期时间列,python,python-3.x,pandas,date,datetime,Python,Python 3.x,Pandas,Date,Datetime,我不知道如何使用以下格式转换我列“datetime”中的数据: 2020-01-01T00:00:00.000+01:00 关于: Jan-2020 我试过这个: works_data["datetime"] = pd.to_datetime(works_data["datetime"], utc=True).dt.strftime('%b-%Y') 但是不起作用。。。它以该格式返回日期,但少于一个月。 例如,对于2020-01-01T00:00:0

我不知道如何使用以下格式转换我列“datetime”中的数据:

2020-01-01T00:00:00.000+01:00
关于:

Jan-2020
我试过这个:

works_data["datetime"] = pd.to_datetime(works_data["datetime"], utc=True).dt.strftime('%b-%Y')
但是不起作用。。。它以该格式返回日期,但少于一个月。 例如,对于
2020-01-01T00:00:00.000+01:00
返回
2019年12月
。。。我不知道为什么

有人能帮我解决这个问题吗

编辑:

正在工作的实际代码

import requests
import pandas as pd
import json
from pandas.io.json import json_normalize
import datetime
import time

url = "https://apidatos.ree.es/es/datos/generacion/estructura-generacion?start_date=2020-01-01T00:00&end_date=2020-12-31T22:00&time_trunc=month"


response = requests.get(url)
data = response.json()
df = pd.DataFrame(data['included'])


works_data = pd.json_normalize(data=df['attributes'], record_path='values', 
                            meta=['title']) 
如果我打印works_数据,它会返回:

value   percentage  datetime    title
0   3.726053e+06    0.163889    2020-01-01T00:00:00.000+01:00   Hidráulica
1   2.837911e+06    0.139561    2020-02-01T00:00:00.000+01:00   Hidráulica
2   3.112718e+06    0.148076    2020-03-01T00:00:00.000+01:00   Hidráulica
3   2.861429e+06    0.163464    2020-04-01T00:00:00.000+02:00   Hidráulica
4   2.858050e+06    0.159065    2020-05-01T00:00:00.000+02:00   Hidráulica
... ... ... ... ...
107 3.504687e+04    0.002002    2020-04-01T00:00:00.000+02:00   Residuos renovables
108 3.665093e+04    0.002040    2020-05-01T00:00:00.000+02:00   Residuos renovables
109 4.231355e+04    0.002197    2020-06-01T00:00:00.000+02:00   Residuos renovables
110 4.313452e+04    0.001803    2020-07-01T00:00:00.000+02:00   Residuos renovables
111 3.159610e+04    0.003548    2020-08-01T00:00:00.000+02:00   Residuos renovables

你知道如何继续转换datetime列吗?

正如Quang Hoang已经提到的,你正在将UTC+1转换为UTC,这是一小时前的事。因此,
pd.to_datetime(“2020-01-01T00:00:00.000+01:00”,utc=True)
解析为
时间戳('2019-12-31 23:00:00+0000',tz='utc')

似乎您不想将日期转换为UTC,因此不要将相应的参数设置为
True

转换字符串 或者,仅使用
datetime
模块:

from datetime import datetime as dt
dt.fromisoformat("2020-01-01T00:00:00.000+01:00").strftime("%b-%Y")
>>> 'Jan-2020'
转换系列 如果要转换整个datetimes列,请使用列表理解或Pandas
Series.dt.strftime
函数

import pandas as pd
dates = pd.Series(["2020-03-01T00:00:00.000+01:00", "2020-01-01T00:00:00.000+01:00", "2020-06-01T00:00:00.000+01:00"])
pd.to_datetime(dates).dt.strftime("%b-%Y")

>>> 0    Mar-2020
>>> 1    Jan-2020
>>> 2    Jun-2020
>>> dtype: object
当序列中存在不同的时区偏移时,上述方法将失败。您将收到一个
ValueError:Tz-aware-datetime.datetime无法转换为datetime64,除非utc=True
。在这种情况下,您可以使用
apply
删除每个datetime的时区信息,或者使用如下列表理解

df["column"] = [pd.to_datetime(date).strftime("%b-%Y") for date in dates]

对于固定UTC偏移量:将日期/时间列本地化为
None
strftime
之前:

pd.to_datetime("2020-01-01T00:00:00.000+01:00").tz_localize(None).strftime('%b-%Y')
Out[47]: 'Jan-2020'
另请参见以获取有关背景中发生的情况的更多信息


由于您的输入似乎包含混合UTC偏移量,因此通过
到_datetime
的转换将产生一系列
datetime.datetime
对象(dtype对象,而不是dtype datetime64)。您需要将
tzinfo
属性替换为
None

pd.to_datetime(works_data["datetime"]).apply(lambda t: t.replace(tzinfo=None)).dt.strftime('%b-%Y')

考虑到时区是
+1
,也就是说,
+01:00
中的
2020-01-01 00:00:00
时区在格林尼治标准时间仍然在
2019
中,我觉得这听起来很合理。所以。。我怎样才能修复它?嗨@sabacherli谢谢你的回答!!如果我没有将utc设置为True,则会出现此错误…如果我使用您的第一个选项/
pd.to\u datetime(works\u data[“datetime”])。strftime(“%b-%Y”)
我有此错误“对象”系列没有属性“strftime”有关详细信息,我的“datetime”列是Dtype=objectI,我也有同样的问题….
Tz-aware-datetime.datetime无法转换为datetime64,除非utc=True
我刚刚发布了我的所有代码,请检查一下好吗?谢谢@MrFruppes我已经尝试过了,但返回了这个
索引不是有效的DatetimeIndex或PeriodIndex
@rogarui:hm,似乎您想将其应用于df的索引,但它以前没有被强制转换为\u datetime?我不知道发生了什么…我创建了我的df,当我尝试转换该列时,返回了太多错误。。。你喜欢我发布全部代码吗?我只是发布所有代码,你能检查一下吗@MrFuppes@rogarui-您的数据包含混合UTC偏移量
pd.to_datetime
无法推断相应的
pytz.fixed_偏移量,因此。。。是时候做一个
lambda
:)(见我的答案编辑)
pd.to_datetime(works_data["datetime"]).apply(lambda t: t.replace(tzinfo=None)).dt.strftime('%b-%Y')