Python 如何从数据帧中的时间戳列中删除时区
我读过,但我想让我的dataframe时区的时间列与sqlite3数据库的互操作性变得简单 pandas数据框中的数据已转换为UTC数据,但我不希望必须在数据库中维护此UTC时区信息 从其他来源获得的数据样本如下:Python 如何从数据帧中的时间戳列中删除时区,python,pandas,dataframe,timezone,timestamp-with-timezone,Python,Pandas,Dataframe,Timezone,Timestamp With Timezone,我读过,但我想让我的dataframe时区的时间列与sqlite3数据库的互操作性变得简单 pandas数据框中的数据已转换为UTC数据,但我不希望必须在数据库中维护此UTC时区信息 从其他来源获得的数据样本如下: print(type(testdata)) print(testdata) print(testdata.applymap(type)) 给出: <class 'pandas.core.frame.DataFrame'>
print(type(testdata))
print(testdata)
print(testdata.applymap(type))
给出:
<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 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
new
0 <class 'int'>
1 <class 'int'>
2 <class 'int'>
3 <class 'int'>
4 <class 'int'>
给出一个最终错误:
TypeError: index is not a valid DatetimeIndex or PeriodIndex
如何用时区原始时间戳替换列?该列必须是
datetime
d类型,从使用开始,您可以使用更改时区,原始时间戳对应于时区None
:
testdata['time'].dt.tz_本地化(无)
除非该列是索引(),否则当您的数据包含跨越不同时区的日期时间或应用夏令时之前和之后的日期时间时,必须使用来访问。,例如,使用psycopg2从postges数据库获取,根据熊猫的版本,您可能会遇到以下几种情况,其中最佳转换方法是:
testdata['time'].apply(lambda x: x.replace(tzinfo=None))
当使用.dt.tz_localize(None)
时,这种方法起作用的场景(注意FixedOffsetTimezone
使用不同的偏移量
)不会:
df = pd.DataFrame([
datetime.datetime(2018, 5, 17, 21, 40, 20, 775854,
tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)),
datetime.datetime(2021, 3, 17, 14, 36, 13, 902741,
tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=60, name=None))
])
pd.\u版本__
'1.1.2'
df[0].dt.tz_本地化(无)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python3.8/site packages/pandas/core/generic.py”,第5132行,在__
返回对象。\uuuGetAttribute(self,name)
文件“/usr/local/lib/python3.8/site packages/pandas/core/accessor.py”,第187行,在__
存取器_obj=自身。_存取器(obj)
文件“/usr/local/lib/python3.8/site packages/pandas/core/index/accessors.py”,第480行,新__
raise AttributeError(“只能对datetimelike值使用.dt访问器”)
AttributeError:只能对datetimelike值使用.dt访问器
——似乎对某种对象有效,但对数据帧的列无效。
df = pd.DataFrame([
datetime.datetime(2018, 5, 17, 21, 40, 20, 775854,
tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)),
datetime.datetime(2021, 3, 17, 14, 36, 13, 902741,
tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=60, name=None))
])
pd.__version__
'0.24.2'
df[0].dt.tz_localize(None)
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/pandas/core/arrays/datetimes.py", line 1861, in objects_to_datetime64ns
values, tz_parsed = conversion.datetime_to_datetime64(data)
File "pandas/_libs/tslibs/conversion.pyx", line 185, in pandas._libs.tslibs.conversion.datetime_to_datetime64
ValueError: Array must be all same time zone
pd.__version__
'1.1.2'
df[0].dt.tz_localize(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/site-packages/pandas/core/generic.py", line 5132, in __getattr__
return object.__getattribute__(self, name)
File "/usr/local/lib/python3.8/site-packages/pandas/core/accessor.py", line 187, in __get__
accessor_obj = self._accessor(obj)
File "/usr/local/lib/python3.8/site-packages/pandas/core/indexes/accessors.py", line 480, in __new__
raise AttributeError("Can only use .dt accessor with datetimelike values")
AttributeError: Can only use .dt accessor with datetimelike values