【问题标题】:Reading Date times from Excel to Python using Pandas使用 Pandas 从 Excel 读取日期时间到 Python
【发布时间】:2020-01-09 03:47:35
【问题描述】:

我正在尝试从转换为 python 的 Excel 文件中读取数据,然后将其拆分为数字(整数和浮点数)和其他所有内容。有许多不同类型的列。

我目前用

引入数据
pd.read_excel

然后用

拆分数据
DataFrame.select_dtypes("number")

当用户上传时间(即 12:30:00)时,他们希望将其识别为时间。但是python(当前)将其视为dtype对象。

如果我使用 parse_dates 指定列,那么它可以工作,但是由于我事先不知道数据是什么,因此我理想情况下希望自动完成此操作。我已经尝试设置 parse_dates = True 但它似乎没有任何区别。

我不确定是否有办法识别文件上传后的数据时间。然而,我再次希望这样做而不必指定列(所以任何可以转换的都是)

非常感谢

【问题讨论】:

    标签: python excel pandas datetime types


    【解决方案1】:

    这是我需要的

    for column_name in df.columns:
        try:
            df.loc[:, column_name] = pd.to_timedelta(df.loc[:, column_name].astype(str))
        except ValueError:
            pass
    

    这会尝试将每一列转换为 timedelta 格式。如果它不能转换它,它会返回一个值错误并移动到下一列。

    在运行后,任何可以识别为 timedelta 格式的列都会被转换。

    【讨论】:

      【解决方案2】:

      如果您的数据只包含一个 dtype object 的列(我假设它是一个字符串),您可以执行以下操作:

      1) 过滤dtype为object的列

      import pandas as pd
      datatime_col = df.select_dtypes(object)
      

      2) 将其转换为秒

      datetime_col_in_seconds = pd.to_timedelta(datatime_col.loc[0]).dt.total_seconds()
      

      然后您可以将转换后的列重新附加到原始数据和/或进行任何您想要的处理。

      最终,您可以将其转换回日期时间。

      datetime_col = pd.to_datetime(datetime_col_in_seconds, unit='s')
      

      如果您有多个包含 dtype 对象的列,您可能需要进行更多预处理,但我想这是开始处理您的特定情况的好方法。

      【讨论】:

      • 我忘了说,但用户可以上传任意数量的列。
      • 只要它们都是 dtype 对象(即字符串),建议的方法应该有效。您只需对从 df.select_dtypes(object) 命令获得的所有列执行此操作。就像在 for 循环或类似的东西中。
      • 它们不都是同一类型。所以时间会和数字和字符串混在一起。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2016-04-15
      • 2017-12-15
      • 2016-11-03
      相关资源
      最近更新 更多