【问题标题】:How to convert pandas data frame datetime column to int?如何将熊猫数据框日期时间列转换为 int?
【发布时间】:2019-05-22 10:19:15
【问题描述】:

我在将 中的datetime 列之一转换为int. 时遇到问题我的代码是:

df['datetime_column'].astype(np.int64)

我得到的错误是:

以 10 为基数的 int() 的无效文字:'2018-02-25 09:31:15'

我对正在发生的事情一无所知,因为我的其他一些 datetime 列的转换工作正常。可以转换为int 的日期范围是否存在问题?

【问题讨论】:

  • 你希望 '2018-02-25 09:31:15' 转换成什么整数?
  • 在我看来,这些值也超出了范围。但是当我尝试将它们转换为 'float' 时,出现以下错误:could not convert string to float: '2018-02-15 14:28:08' 我想我之前忘记将列转换为 'datetime'将其转换为“int”。我将代码更新为:'pd.to_datetime(df['datetime_column']).astype(np.int64)' 并且转换工作正常。
  • 为什么要通过强制转换将 datetime 转换为 int?你不想用 df['date_time'].map(dt.datetime.toordinal) 代替吗?
  • 非常感谢您的建议。我正在构建一个决策树模型,需要从 datetime 字段中提取一些特征。我已经提取了月、年、日、星期几、一天中的小时、周末指示器、与当前日期的偏移量等。我只是通过添加新功能进行试验,因此只需通过转换进行转换。顺便说一句,我猜 datetime.toordinal 和当前日期的偏移量应该是相关的?

标签: pandas dataframe python pandas datetime dataframe type-conversion


【解决方案1】:

你会使用

df['datetime_colum'].apply(lambda x:x.toordinal())

如果失败,原因可能是您的列是对象而不是日期时间。所以你需要:

df['datetime_colum'] = pd.to_datetime(df['datetime_colum'])

在发送到序数之前。

如果您从事特征工程,您可以尝试在 date1 和 date2 之间创建天数,通过查看月份来获取布尔值是冬季、夏季、秋季还是春季,如果您有时间,则布尔值是早上、中午或晚上,但都取决于您的机器学习问题。

【讨论】:

    【解决方案2】:

    从您的评论来看,您似乎自己解决了问题。我的猜测是您创建了数据框而没有指定该列应该被读取为字符串以外的任何内容,因此它是一个字符串。如果我是对的,并且您检查了列类型,它应该显示为对象。如果您检查列中的单个条目,它应该显示为字符串。

    如果是其他问题,请跟进。

    【讨论】:

    • 非常感谢。这是完全相同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2020-03-14
    • 2018-12-08
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多