【问题标题】:String dates into unixtime in a pandas dataframe在 pandas 数据框中将日期字符串转换为 unixtime
【发布时间】:2020-02-26 11:22:42
【问题描述】:

我得到了这样列的数据框:

Date
3 mins
2 hours
9-Feb
13-Feb

日期的类型是每一行的字符串。将日期转换为整数 unixtime 的最简单方法是什么?

【问题讨论】:

  • 您的数据缺少确切的日、月、年和时间信息。没有这个就不可能转换成unix时间格式
  • 嘿,@KarthickMohanraj。我需要的确切字符串类型是什么,以便我可以将其转换为 unix?如果我将 -Feb 替换为 /02/2020 怎么办?如果 2020 年 9 月 2 日足以转换,那对我来说没问题。我需要在时间戳中获取日期,而不是精确到秒/分钟的时间。
  • Unix 时间是自 1970 年 1 月 1 日以来经过的时间,以秒为单位。例如,如果您想计算5.00 am on 5th of Feb 2019 的 Unix 时间,您将能够计算它,因为您有准确的时间(5.00 am)、日期(5th)、月份(Feb)和年份(2019)信息你想要的unix时间。但就您而言,您的数据框中没有这些细节

标签: python pandas dataframe unix-timestamp


【解决方案1】:

一个想法是将列转换为日期时间和时间增量:

df['dates'] = pd.to_datetime(df['Date']+'-2020', format='%d-%b-%Y', errors='coerce')

times = df['Date'].replace({'(\d+)\s+mins': '00:\\1:00',
                             '\s+hours': ':00:00'}, regex=True)
df['times'] = pd.to_timedelta(times, errors='coerce')

#remove rows if missing values in dates and times
df = df[df['Date'].notna() | df['times'].notna()]
df['all'] = df['dates'].dropna().astype(np.int64).append(df['times'].dropna().astype(np.int64))
print (df)
      Date      dates    times                  all
0   3 mins        NaT 00:03:00         180000000000
1  2 hours        NaT 02:00:00        7200000000000
2    9-Feb 2020-02-09      NaT  1581206400000000000
3   13-Feb 2020-02-13      NaT  1581552000000000000

【讨论】:

  • 嘿@jezrael。这看起来真的很神奇,谢谢!只有一个问题:正常日期的 180000000000 是 1975 年 9 月 15 日星期一,我认为不早于 3 分钟:D
  • @AlexKalaidjiev - 我为日期时间添加年份 2020,如果需要 1975df['dates'] = pd.to_datetime(df['Date']+'-2020', format='%d-%b-%Y', errors='coerce') 更改为 df['dates'] = pd.to_datetime(df['Date']+'-1975', format='%d-%b-%Y', errors='coerce')
  • 现在两种方法都试过了,但我仍然在所有三个新行中得到 NaT 或 NaN。最后一行也出错了:np is not defined
  • @AlexKalaidjiev - 我认为问题应该出在数据格式上,数据与问题完全一样 - 月份的前 3 个字母或带有 minshours 字符串的数字?因为对于每种不同的格式,解决方案都会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2010-12-12
  • 2014-12-18
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多