【问题标题】:Can't compare a list of strings with a datetime object无法将字符串列表与日期时间对象进行比较
【发布时间】:2019-10-21 19:31:36
【问题描述】:

我从谷歌工作表导入了一个工作表,该工作表恰好在 ['Timestamp'] 列中有一个字符串格式的时间戳。为了通过比较过滤日期并选择一些行,我创建了一个变量,它采用今天的日期(diaHoy)和另一个来自前一天的变量(diaAyer)

然后我尝试应用一个掩码,将 diaHoy 和 diaAyer 与每个时间戳元素进行比较,但我不能,因为 diaHoy 和 diaAyer 是日期时间元素,每个时间戳单元格都是一个字符串。我尝试将 strptime 应用于 ['Timestamp'] 列,但我不能,因为它是一个列表

样本数据:

df = pd.DataFrame ({'16/10/2019 14:56:36':['A','B'],'21/10/2019 14:56:36':['C','D'],'21/10/2019 14:56:36':['E','F']

diaHoy = 2019/10/21

diaAyer = 2019/10/20

import pandas as pd

diaHoy = datetime.today().date()
diaAyer = diaHoy + timedelta(days = -1)


wks1 = gc.open_by_url("CODE_URL").sheet1
df1 = wks1.get_all_values()
df1.pop(0)
mask1 = (df1 > diaAyer) & (df1 <= diaHoy)
pegado1 = df1.loc[mask1]

我希望掩码通过将第一列中的日期与 diaHoy 和 diaAyer 进行比较来过滤掉行

过滤器:2019 年 10 月 21 日至 2019 年 10 月 20 日之间

预期结果:

df = pd.DataFrame ({'21/10/2019 14:56:36':['C','D'],'21/10/2019 14:56:36':['E','F']

【问题讨论】:

  • 习惯上添加样本数据和所需的输出,这样更容易/更快地提供帮助。尝试将pd.to_datetime 应用于字符串系列
  • 如果您使用的是 pandas 数据框,请查看 How to make good pandas examples 并提供示例输入和输出

标签: python pandas datetime gspread


【解决方案1】:

您可以将时间戳字符串的元组转换为日期时间对象列表:

import pandas as pd 
df2 = pd.DataFrame({pd.to_datetime(key):df[key] for key in df})

【讨论】:

  • 数据框 df1 为 3 列宽。如果我没有指定,to_datetime 是否不会应用于所有列?是否可以将 to_datetime 定位到单个列以将其与当前日期进行比较?
  • 如果我理解正确的话,这应该可以工作。您可以将旧数据帧的键转换为日期时间对象并定义一个新数据帧: df2 = pd.DataFrame({pd.to_datetime(key):df[key] for key in df})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2016-11-04
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2022-11-21
  • 2022-01-16
相关资源
最近更新 更多