Pandas日期时间从特定ISO格式转换

v09wglhw  于 2022-12-28  发布在  其他
关注(0)|答案(3)|浏览(124)

先谢谢你的帮助。
我正在尝试转换一个日期时间,这是一个字符串在ISO格式的日期时间对象。但尝试了许多方法都没有成功。请您的帮助。
作为一个例子,我有一个列时间类似的 Dataframe ,如下所示。这是从数据库中提取的,这是输出的格式。

2018-12-04T04:39:26Z
2018-12-04T05:10:54.6Z
2018-12-04T05:17:32Z
2018-12-04T10:51:20.5Z
...

到目前为止我已经尝试过(多次尝试)但未成功的:

df.index = pd.to_datetime(df.index, format = "%Y-%m-%dT%H:%M:%SZ", errors='ignore')

df.index = pd.to_datetime(df.index)

df.time = df.time.map(lambda x: pd.to_datetime(dt.datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ'), format = '%d/%m/%Y %H:%M'))

再次感谢!

cedebl8k

cedebl8k1#

有点晚了,但我相信,这种React需要是可见的,以缓解人们的生活。
如果像你说的那样,它是从数据库中提取出来的,那么你可以在建立 Dataframe 的时候直接提取出来。大多数panda读取函数都有一个参数parse_dates,如documentation中所述:
注意:iso8601格式的日期有一个快速路径。
因此,即使您有两个或更多的日期列,您也可以用一种极其简单的方式来完成。

df = pd.read_csv("x.csv", parse_dates=["Date1", "Date2"], names=["ID", "Date1", "Date2"])
tct7dpnv

tct7dpnv2#

I wanted to answer this before. In the end I just made a function that deals with different data inputs and also creates a dataframe with column names. Thanks ALollz for your comment regarding pd.to_datetime(df.index, errors='coerce').
因此,为了从ISO格式的字符串转换索引,我建立并遵循了以下顺序:

df = pd.DataFrame([[-1.8, '2018-09-14T13:36:00Z']], columns = ['current', 'time'])
df.set_index('time', inplace = True)   # make it your index by using the inplace=True
df.index = pd.to_datetime(df.index, errors='coerce')

转换为日期时间后,请检查日期是否正确。如果读取错误,可能需要指定格式。
谢谢!

0yycz8jy

0yycz8jy3#

pandas.to_datetime()方法有一个“infer_datetime_format”参数,文档内容如下:

infer_datetime_format : boolean, default False
If True and no format is given, attempt to infer the format of the datetime strings, 
and if it can be inferred, switch to a faster method of parsing them. 
In some cases this can increase the parsing speed by ~5-10x.

因此,将inferer_datatime_format设置为true,并保留format参数默认值,这对我很有效。
下面是我的案例:

>>> hours_df.head()
                            Open    High   Close     Low         Volume
Date                                                                   
2020-01-05T02:00:00.000Z  7457.9  7481.5  7431.3  7442.1  1147.57478328
2020-01-05T01:00:00.000Z  7374.8    7479  7374.8  7457.9  2709.45095966
2020-01-05T00:00:00.000Z  7354.9  7392.1  7354.2  7374.7   642.60575144

>>> hours_df.index
Index(['2020-01-05T02:00:00.000Z', '2020-01-05T01:00:00.000Z',
       '2020-01-05T00:00:00.000Z'],
      dtype='object', name='Date')

>>> hours_df.index = pd.to_datetime(hours_df.index, infer_datetime_format=True)

>>> hours_df.index
DatetimeIndex(['2020-01-05 02:00:00+00:00', '2020-01-05 01:00:00+00:00',
               '2020-01-05 00:00:00+00:00'],
              dtype='datetime64[ns, UTC]', name='Date', freq=None)

>>> hours_df.head()
                             Open    High   Close     Low         Volume
Date                                                                    
2020-01-05 02:00:00+00:00  7457.9  7481.5  7431.3  7442.1  1147.57478328
2020-01-05 01:00:00+00:00  7374.8    7479  7374.8  7457.9  2709.45095966
2020-01-05 00:00:00+00:00  7354.9  7392.1  7354.2  7374.7   642.60575144

相关问题