我一直在努力从pandas数据框中的列中删除时区信息.我检查了以下问题,但它对我不起作用:
我可以将pandas DataFrame导出到Excel剥离tzinfo吗?
我使用tz_localize为datetime对象分配时区,因为我需要使用tz_convert转换为另一个时区.这会以"-06:00"的方式添加UTC偏移量.我需要摆脱这种偏移,因为当我尝试将数据框导出到Excel时会导致错误.
实际输出
2015-12-01 00:00:00-06:00
Run Code Online (Sandbox Code Playgroud)
期望的输出
2015-12-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
我试图使用str()方法获取我想要的字符,但似乎tz_localize的结果不是字符串.到目前为止,我的解决方案是将数据帧导出到csv,读取文件,并使用str()方法获取我想要的字符.
有更简单的解决方案吗?
我为外汇DataFrame阅读了Pandas更改时区,但是我想让我的数据帧时区的时间列与sqlite3数据库的互操作性.
我的pandas数据帧中的数据已经转换为UTC数据,但我不想在数据库中维护此UTC时区信息.
给出从其他来源获得的数据样本,它看起来像这样:
print(type(testdata))
print(testdata)
print(testdata.applymap(type))
Run Code Online (Sandbox Code Playgroud)
得到:
<class 'pandas.core.frame.DataFrame'>
time navd88_ft station_id new
0 2018-03-07 01:31:02+00:00 -0.030332 13 5
1 2018-03-07 01:21:02+00:00 -0.121653 13 5
2 2018-03-07 01:26:02+00:00 -0.072945 13 5
3 2018-03-07 01:16:02+00:00 -0.139917 13 5
4 2018-03-07 01:11:02+00:00 -0.152085 13 5
time navd88_ft station_id \
0 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
1 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
2 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
3 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
4 …Run Code Online (Sandbox Code Playgroud) 我有两个日期时间列,当我将它们读入内存但实际上在美国/东部时它们是天真的.我只想将这两列转换为US/Central.
我发现了一种有效的方法,但似乎我正在做一个解决方法.我将call_start和call_end列改为名为'start'和'end',因此我最终没有重复的列名.然后,我为每个列创建了一个单独的datetimeindex并重置索引.
aht.set_index(pd.DatetimeIndex(aht['start']).tz_localize('US/Eastern').tz_convert('US/Central'), inplace = True, drop = True)
aht.index.names = ['call_start']
aht = aht.reset_index()
aht.set_index(pd.DatetimeIndex(aht['end']).tz_localize('US/Eastern').tz_convert('US/Central'), inplace = True, drop = True)
aht.index.names = ['call_end']
aht = aht.reset_index()
Run Code Online (Sandbox Code Playgroud)
我最终得到:
call_end call_start start end
2016-01-13 06:05:01-06:00 2016-01-13 06:02:00-06:00 01/13/2016 07:02 01/13/2016 07:05
2016-01-13 06:07:00-06:00 2016-01-13 06:03:16-06:00 01/13/2016 07:03 01/13/2016 07:07
2016-01-13 06:09:13-06:00 2016-01-13 06:06:02-06:00 01/13/2016 07:06 01/13/2016 07:09
2016-01-13 06:17:51-06:00 2016-01-13 06:06:20-06:00 01/13/2016 07:06 01/13/2016 07:17
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?所有其他数据都在中央时间,所以我只是想确保这个文件太合并,当我将文件合并在一起时更有意义.我不关心那里有实际的时区标记 - 有没有办法在我创建新列后轻松剥离它?
我试图pandas.DataFrames在一个datetime64[ns, UTC]领域加入两个人,但失败了ValueError(如下所述),这对我来说并不直观。考虑这个例子:
>>> import pandas as pd
>>> import numpy as np
>>>
>>> s_1 = pd.Series(np.random.randn(2,), index=['1981-12-10', '1984-09-14'])
>>> s_1.index = pd.to_datetime(s_1.index, utc=True)
>>> df_1 = pd.DataFrame(s_1, columns=['s_1']).assign(date=s_1.index)
>>> df_1.dtypes
s_1 float64
date datetime64[ns, UTC]
dtype: object
>>>
>>> d = {
... 'v': np.random.randn(2,),
... 'close': ['1981-12-10', '1984-09-14']
>>> }
>>> df_2 = pd.DataFrame(data=d)
>>> df_2.close = pd.to_datetime(df_2.close, utc=True)
>>> df_2['date'] = df_2.close.apply(lambda x: x.replace(hour=0, minute=0, second=0))
>>> df_2.dtypes
v float64
close …Run Code Online (Sandbox Code Playgroud) 我有一个带有时间戳的数据框,它的数据类型是对象。
0 2020-07-09T04:23:50.267Z
1 2020-07-09T11:21:55.536Z
2 2020-07-09T11:23:18.015Z
3 2020-07-09T04:03:28.581Z
4 2020-07-09T04:03:33.874Z
Name: timestamp, dtype: object
Run Code Online (Sandbox Code Playgroud)
我不知道上述数据帧中日期时间的格式。我将pd.to_datetime应用于上述列,其中数据类型更改为datetime64[ns, UTC]。
df['timestamp'] = pd.to_datetime(df.timestamp)
Run Code Online (Sandbox Code Playgroud)
现在数据框看起来像这样,
0 2020-07-09 04:23:50.267000+00:00
1 2020-07-09 11:21:55.536000+00:00
2 2020-07-09 11:23:18.015000+00:00
3 2020-07-09 04:03:28.581000+00:00
4 2020-07-09 04:03:33.874000+00:00
Name: timestamp, dtype: datetime64[ns, UTC]
Run Code Online (Sandbox Code Playgroud)
我想将上面的 datetime64[ns, UTC] 格式转换为正常的日期时间。
For example,
2020-07-09 04:23:50.267000+00:00 to 2020-07-09 04:23:50
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这个2020-07-09T04:23:50.267Z表示的含义是什么,以及如何将其转换为日期时间对象?
我正在将数据导入 pandas,并希望删除数据中存在的任何时区 \xe2\x80\x93。如果数据有时区,则以下代码可以成功运行:
\ncol = "my_date_column"\ndf[col] = pd.to_datetime(df[col]).dt.tz_localize(None) # We don\'t want timezones...\nRun Code Online (Sandbox Code Playgroud)\n如果数据不包含时区,我想使用以下代码:
\ndf[col] = pd.to_datetime(df[col])\nRun Code Online (Sandbox Code Playgroud)\n我的问题是我不确定如何测试 datetime object/series 中的时区。
\n当我使用 pandas read_csv 读取具有时区感知日期时间的列(并将此列指定为索引)时,pandas 将其转换为时区天真 utc DatetimeIndex。
Test.csv 中的数据:
DateTime,Temperature
2016-07-01T11:05:07+02:00,21.125
2016-07-01T11:05:09+02:00,21.138
2016-07-01T11:05:10+02:00,21.156
2016-07-01T11:05:11+02:00,21.179
2016-07-01T11:05:12+02:00,21.198
2016-07-01T11:05:13+02:00,21.206
2016-07-01T11:05:14+02:00,21.225
2016-07-01T11:05:15+02:00,21.233
从 csv 读取的代码:
In [1]: import pandas as pd
In [2]: df = pd.read_csv('Test.csv', index_col=0, parse_dates=True)
Run Code Online (Sandbox Code Playgroud)
这会产生一个表示时区天真的 UTC 时间的索引:
In [3]: df.index
Out[3]: DatetimeIndex(['2016-07-01 09:05:07', '2016-07-01 09:05:09',
'2016-07-01 09:05:10', '2016-07-01 09:05:11',
'2016-07-01 09:05:12', '2016-07-01 09:05:13',
'2016-07-01 09:05:14', '2016-07-01 09:05:15'],
dtype='datetime64[ns]', name='DateTime', freq=None)
Run Code Online (Sandbox Code Playgroud)
我尝试使用 date_parser 函数:
In [4]: date_parser = lambda x: pd.to_datetime(x).tz_localize(None)
In [5]: df = pd.read_csv('Test.csv', index_col=0, parse_dates=True, date_parser=date_parser)
Run Code Online (Sandbox Code Playgroud)
这给出了相同的结果。 …
我有一个带有DataTime列的数据框(时区的格式不同)。看来时区是UTC,但我想将列转换为pd.to_datetime,但失败了。那就是问题1。由于失败了,因此我无法在该时间段上执行任何datetime操作,例如按日期分组/确定日期/按小时分组等等。这是我的数据框df_res
DateTime
2017-11-02 19:49:28-07:00
2017-11-27 07:32:22-08:00
2017-12-27 17:01:15-08:00
Run Code Online (Sandbox Code Playgroud)
命令的输出
df_res["DateTime"] = df_res["DateTime"].dt.tz_convert('America/New_York')
Run Code Online (Sandbox Code Playgroud)
AttributeError: Can only use .dt accessor with datetimelike values
当我转换为 datetime
df_res['DateTime'] = pd.to_datetime(df_res['DateTime'])
Run Code Online (Sandbox Code Playgroud)
ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True
我觉得我正在转圈。我需要将列转换为日期时间才能执行操作,并且为了做到这一点,我需要将它们全部设置为相同的时区,但除非具有日期时间对象,否则我就不能使用相同的时区,因此,如何最好地实现这一点。我确实提到了以前的帖子,但它们似乎尽可能容易地转换为日期时间:
将datetime列转换为其他时区pandas 将pandas时区感知的DateTimeIndex转换为朴素时间戳,但在特定时区
print(df.head) 结果是
ds y
0 2019-03-01 10:57:32.381378+00:00 18760
1 2019-03-01 10:58:30.933070+00:00 28140
2 2019-03-01 10:58:45.425421+00:00 35520
3 2019-03-01 10:59:11.588687+00:00 50280
4 2019-03-01 10:59:19.064323+00:00 72420
Run Code Online (Sandbox Code Playgroud)
在尝试使用 Facebook Prophet 时,我收到以下错误:ValueError: Column ds has timezone specified, which is not supported. Remove timezone.我现在尝试从 ds 列中删除时区。您知道如何实现这一目标吗?
df = pd.read_csv(
'wob-2019-ticket-sales.csv',
usecols=['created', 'total_gross'],
parse_dates=['created'],
# date_parser=lambda x: pd.to_datetime(x.rpartition('-')[0])
)
df['y'] = df['total_gross'].cumsum()
df = df.rename(columns={'created': 'ds'})
df = df.drop(columns='total_gross')
df.head()
Run Code Online (Sandbox Code Playgroud) 我正在尝试从熊猫转移到极地,但遇到了以下问题。
\nimport polars as pl\n\ndf = pl.DataFrame(\n {\n "integer": [1, 2, 3], \n "date": [\n "2010-01-31T23:00:00+00:00",\n "2010-02-01T00:00:00+00:00",\n "2010-02-01T01:00:00+00:00"\n ]\n }\n)\ndf = df.with_columns(\n [\n pl.col("date").str.strptime(pl.Datetime, fmt="%Y-%m-%dT%H:%M:%S%z").dt.with_time_zone("Europe/Amsterdam"),\n ]\n)\nRun Code Online (Sandbox Code Playgroud)\n产生以下数据框:
\n>>> df\nshape: (3, 2)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 integer \xe2\x94\x86 date \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x86 datetime[\xce\xbcs, Europe/Amsterdam] \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 1 \xe2\x94\x86 2010-02-01 00:00:00 CET \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x86 2010-02-01 01:00:00 CET \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x86 2010-02-01 02:00:00 CET \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\nRun Code Online (Sandbox Code Playgroud)\n如您所见,我成功地将日期时间字符串从 UTC 转换为 CET。但是,当我尝试提取日期时(使用该线程中极地作者接受的答案:/sf/answers/5124892391/),它似乎从 UTC 字符串中提取日期,即使它已被改造,例如:
\n>>> df\nshape: (3, 2)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 integer …Run Code Online (Sandbox Code Playgroud) 正如问题所说,我有一系列字符串,如'2020-01-06T00:00:00.000Z'. 如何将本系列转换为datetime使用 Python?大熊猫的首选方法。如果没有,是否有任何方法可以解决此任务?谢谢大家。
string '2020-01-06T00:00:00.000Z'
convert to 2020-01-06 00:00:00 under datetime object
Run Code Online (Sandbox Code Playgroud) 我想+00:00从下面的时间戳中删除 。我使用下面的代码从时间戳中删除了 T 和 Z,但 dtype 仍然是datetime64[ns, UTC] ,理想情况下我想将其转换为 datetime64[ns]
df['Timestamp_column'].dt.tz_localize(None)
Run Code Online (Sandbox Code Playgroud)
转换前的 Timestamp_column:
2020-07-10T14:12:39.000Z
Run Code Online (Sandbox Code Playgroud)
输出:
2020-07-10 14:12:39+00:00
Run Code Online (Sandbox Code Playgroud)