【问题标题】:How to get only date and text values from a field with Datetime and text values in python?python - 如何从具有日期时间和文本值的字段中仅获取日期和文本值?
【发布时间】:2019-02-04 15:41:24
【问题描述】:

我的 Python 字段值如下所示:

Metrics_Values
2017-12-31 00:00:00
UW Value
2017-12-31 00:00:00
2017-12-31 00:00:00

我想要下面的输出:

Metric_Values
12/31/2017
UW Value
12/31/2017
12/31/2017

我在这个数据框上尝试了几种不同的操作,但由于值是对象数据类型,而且我也有一些文本值,我很难得到我需要的东西。

欣赏任何指针。 谢谢

【问题讨论】:

    标签: python pandas datetime datetime-format python-datetime


    【解决方案1】:

    我不建议在同一个系列中使用多种类型的数据,但这里有一个代码可以为您完成工作:

    df.Metrics_Values = df.Metrics_Values.map(lambda x: x.date() if isinstance(x, datetime.datetime) else x)
    

    【讨论】:

      【解决方案2】:

      您可以使用datetime 中的strptime(将字符串转换为日期时间对象)和strftime(将日期时间对象转换为字符串)根据需要设置日期格式。这是一个例子:

      import datetime as dt
      
      def convert_format(date_string):
          return dt.datetime.strptime(date_string,'%Y-%m-%d %H:%M:%S').strftime('%Y/%m/%d')
      

      然后apply这个方法到你的数据框或系列:

      df.time_column.apply(lambda x: convert_format(x))
      

      对于输入:

      0  2017-12-31 00:00:00
      1  2017-12-31 00:00:00
      

      使用上面的代码结果:

      0    2017/12/31
      1    2017/12/31
      

      请参阅 strptimestrftime 上的文档以了解有关它们如何工作的更多信息:https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

      【讨论】:

      • 感谢您的回复亨利。但是这个解决方案对我不起作用,因为我几乎没有文本值行以及日期时间行。
      • @ysl 在这种情况下,我建议将此列拆分为单独的列或单独的 DataFrame。 DataFrame 列应该只有一种类型(正如 Alex 提到的)
      • 如果你真的必须保持这种格式(不推荐),那么你可以在我发布的代码中添加一行,你首先检查值是否是日期。以下是检查字符串是否为日期时间格式的方法:stackoverflow.com/questions/25341945/…。然后在这段代码中,将df.time_column.apply(lambda x: convert_format(x))更改为df.time_column.apply(lambda x: convert_format(x) if is_date(x) else x)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多