相关疑难解决方法(0)

在熊猫中删除时区信息

我一直在努力从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()方法获取我想要的字符.

有更简单的解决方案吗?

python pandas

19
推荐指数
3
解决办法
1万
查看次数

如何从pandas数据帧中的Timestamp列中删除时区

为外汇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)

python timezone dataframe pandas timestamp-with-timezone

10
推荐指数
3
解决办法
8001
查看次数

将datetime列转换为不同的时区pandas

我有两个日期时间列,当我将它们读入内存但实际上在美国/东部时它们是天真的.我只想将这两列转换为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)

这是最好的方法吗?所有其他数据都在中央时间,所以我只是想确保这个文件太合并,当我将文件合并在一起时更有意义.我不关心那里有实际的时区标记 - 有没有办法在我创建新列后轻松剥离它?

python pandas

9
推荐指数
1
解决办法
8924
查看次数

使用 pandas.join 在 datetime64[ns, UTC] 上加入失败

我试图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)

python python-3.x pandas

8
推荐指数
1
解决办法
8676
查看次数

将 datetime64[ns, UTC] 熊猫列转换为日期时间

我有一个带有时间戳的数据框,它的数据类型是对象。

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表示的含义是什么,以及如何将其转换为日期时间对象?

python datetime pandas

7
推荐指数
1
解决办法
1万
查看次数

检查 pandas 中的日期时间对象是否有时区?

我正在将数据导入 pandas,并希望删除数据中存在的任何时区 \xe2\x80\x93。如果数据有时区,则以下代码可以成功运行:

\n
col = "my_date_column"\ndf[col] = pd.to_datetime(df[col]).dt.tz_localize(None) # We don\'t want timezones...\n
Run Code Online (Sandbox Code Playgroud)\n

如果数据不包含时区,我想使用以下代码:

\n
df[col] = pd.to_datetime(df[col])\n
Run Code Online (Sandbox Code Playgroud)\n

我的问题是我不确定如何测试 datetime object/series 中的时区

\n

python timezone datetime pandas

6
推荐指数
2
解决办法
1万
查看次数

如何在pandas中使用read_csv读取时区感知日期时间作为时区天真本地DatetimeIndex?

当我使用 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)

这给出了相同的结果。 …

python datetime pandas

5
推荐指数
1
解决办法
1821
查看次数

如何将所有熊猫的datetime列都转换为相同的时区

我有一个带有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转换为朴素时间戳,但在特定时区

python timezone datetime type-conversion pandas

5
推荐指数
2
解决办法
1280
查看次数

Pandas:从 datetime64[ns, UTC] 中删除时区

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)

python pandas facebook-prophet

5
推荐指数
0
解决办法
9859
查看次数

如何从极坐标中的日期时间列中提取日期

我正在尝试从熊猫转移到极地,但遇到了以下问题。

\n
import 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)\n
Run 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\n
Run 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)

python timezone datetime date python-polars

5
推荐指数
1
解决办法
1230
查看次数

如何在 python 中将字符串 '2020-01-06T00:00:00.000Z' 转换为日期时间?

正如问题所说,我有一系列字符串,如'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)

python datetime pandas

4
推荐指数
2
解决办法
2万
查看次数

从 Python/pandas 中的时间戳中删除 +00:00(UTC 偏移量)

我想+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)

python datetime pandas

2
推荐指数
1
解决办法
7407
查看次数