【问题标题】:Pandas date_parser, timezone format 'PST' causing errorPandas date_parser,时区格式“PST”导致错误
【发布时间】:2018-02-26 21:28:02
【问题描述】:

我正在尝试导入带有时间戳的大型 .csv 文件,并将其他列作为浮点数。时间戳如下所示:

2013-08-01 00:00:00 PST

它位于 df 中标记为“时间戳”的列中。

我正在尝试使用 pandas 来导入它,特别是使用 read_csv 函数,并为 date_parser 参数添加我自己的日期解析器。

我创建一个日期解析器如下:

dateparse=lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S %Z')

并按如下方式执行read_csv

df=pd.read_csv(outputFile, sep=',', skiprows=range(1,8), header=None, names=names, usecols=['timestamp', 'power1','power2'], parse_dates=['timestamp'], date_parser=dateparse)

但是我收到一个错误,

时间数据'#file...... output/R3-12.47-3_swing_node.csv'与格式'%Y-%m-%d %H:%M:%S %Z'不匹配

p>

我相信这是因为每个时间戳末尾的“PST”。我该如何解决这个问题?谢谢。

【问题讨论】:

  • 确实没有这样的时区:'PST' in pytz.all_timezonesFalse

标签: python pandas date-parsing


【解决方案1】:

不要将解析器传递给阅读器,让 Pandas 自己找出日期格式:

df=pd.read_csv("foo.csv", header=None, parse_dates=[0])
df[0]
#0   2013-08-01
#Name: 0, dtype: datetime64[ns]

【讨论】:

  • 当我这样做时,日期对象的类型是'str'
  • 您是否将 parse_dates 中的 0 替换为您的实际列名或索引?
【解决方案2】:

可以先导入csv,再转换日期列。

按原样读入,然后在导入后使用日期转换列:

dat['date_column']=pd.to_datetime(dat[original_date_column])

那里的 PST 对我来说效果很好,没问题。

【讨论】:

  • 那你可以事后设置列的时区。首先,使用dat=dat.set_index('local_time') 将日期/时间列设置为数据帧索引,然后使用“localize”将其引入本地时间。 dat=dat.tz_localize(timezone, ambiguous='infer')
  • 我现在得到一个更一般的“ValueError: Uknown string format”错误
  • 你可以显式传递它:date_format='%Y-%m-%d %H:%M:%S %Z' 然后pd.to_datetime(dat['datetime_column'], format=date_format
  • 当我这样做时,我得到了与原始问题相同的错误
  • 您可能在某处的列中有一些不是日期的东西,或者是不同的格式。我会通过编写一个循环来逐个遍历它来解决它,并在尝试解析它之前打印字符串。这样,当错误出现时,您就可以看到是哪个日期搞砸了,并找出解决方法。
猜你喜欢
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 2015-06-28
相关资源
最近更新 更多