Pandas 熊猫处理“读取”csv的本地时间变化缓慢`

Pandas 熊猫处理“读取”csv的本地时间变化缓慢`,pandas,Pandas,当从时区偏移(夏令时)发生变化的大型CSV文件中读取时,parse_dates会变慢。你能建议我该如何处理这件事吗?对于某些工作,我确实转换为“UTC”,但我还需要使用原始的本地时间。有没有办法强制将列解析为datetime64[ns]而不是datetime64[ns,]?我认为添加列时间偏移可能是一种改进。我可能需要原始的naive时间戳 pd.__version__ '0.24.2' 随时间偏移变化 输出 df.date_time 0 2018-11-27 04:57:10+01:

当从时区偏移(夏令时)发生变化的大型CSV文件中读取时,
parse_dates
会变慢。你能建议我该如何处理这件事吗?对于某些工作,我确实转换为“UTC”,但我还需要使用原始的本地时间。有没有办法强制将列解析为
datetime64[ns]
而不是
datetime64[ns,]
?我认为添加列时间偏移可能是一种改进。我可能需要原始的naive时间戳

pd.__version__
'0.24.2'
随时间偏移变化 输出

df.date_time

0    2018-11-27 04:57:10+01:00
1    2018-11-27 04:57:10+02:00
2    2018-11-27 04:57:10+02:00
3    2018-11-27 04:57:10+02:00
Name: date_time, dtype: object
df.date_time

0   2018-11-27 04:57:10+02:00
1   2018-11-27 04:57:10+02:00
2   2018-11-27 04:57:10+02:00
3   2018-11-27 04:57:10+02:00
Name: date_time, dtype: datetime64[ns, pytz.FixedOffset(120)]
我想我想要
dtype:datetime64[ns]

无时间偏移更改 输出

df.date_time

0    2018-11-27 04:57:10+01:00
1    2018-11-27 04:57:10+02:00
2    2018-11-27 04:57:10+02:00
3    2018-11-27 04:57:10+02:00
Name: date_time, dtype: object
df.date_time

0   2018-11-27 04:57:10+02:00
1   2018-11-27 04:57:10+02:00
2   2018-11-27 04:57:10+02:00
3   2018-11-27 04:57:10+02:00
Name: date_time, dtype: datetime64[ns, pytz.FixedOffset(120)]

<> P>当您的数据在中间更改小时偏移量时,基于规则的字符串解析方法只会将这些偏移更改作为不同的未命名时区进行中继。Pandas的问题在于它将列表示为
对象
。要解决这个问题,我们需要显式地将每个值转换为单个命名时区。这使Pandas能够使用,例如,
datetime64[ns,America/New_York]
作为列的类型,如果列中的所有值都具有相同的时区,它将自动执行此操作。更改的小时偏移量由该时区定义定义,因此信息将保留。缺点是,您必须知道指定的时区才能使用数据

我用了一些方法来评估速度差异。无论出于何种原因,内置的Pandas函数
to_datetime()
速度非常慢。相反,我会根据您的数据建议一种替代方法,由您自己执行文本到日期时间的转换。以您喜欢的方式创建Python
datetime
对象,应用时区,然后转换为Pandas
Timestamp
类型。如果您对具有快速字符串到ISO8601解析的外部
ciso8601
库感到满意,可以使用以下方法。您还需要流行的
pytz
库及其时区定义

假设您有一个名为
filename
的CSV文件,它有一个
Timestamp
列,其中包含ISO8601时间戳

导入ciso8601
作为pd进口熊猫
进口皮茨
时区='美国/纽约'
def自定义解析(val):
iso_time=ciso8601.parse_datetime(val)
tz_time=iso_时区(pytz时区)
pd_时间=pd.时间戳(tz_时间)
返回pd_时间
dt=pd.read\u csv(文件名,解析日期=['Timestamp'],日期解析=自定义解析)
如果您不想使用
ciso8601
,可以用基于正则表达式的解析步骤或等替换
iso\u-time=
步骤。几乎任何东西都比Pandas提供的
to\u-datetime()