【问题标题】:Pandas Datetime error: Cannot compare type 'Timestamp' with type 'unicode'Pandas 日期时间错误:无法将“时间戳”类型与“unicode”类型进行比较
【发布时间】:2018-09-01 13:59:01
【问题描述】:

我有一个数据框,D1:

Date	Symbol	ICO_to
6/12/2017 18:00	MYST	5/30/2017
6/13/2017 18:00	MYST	5/30/2017
6/14/2017 18:00	MYST	5/30/2017
6/15/2017 18:00	MYST	5/30/2017
6/16/2017 18:00	MYST	5/30/2017
6/17/2017 18:00	MYST	5/30/2017
6/18/2017 18:00	MYST	5/30/2017
6/19/2017 18:00	MYST	5/30/2017
6/20/2017 18:00	MYST	5/30/2017

下面,我输入逻辑来查看日期列是否小于(ICO_to - 5 天)。如果它更少,我想删除这个特定数据框中的所有行:

D1.Date = pd.to_datetime(D1.Date) 
D1['Date'] = D1['Date'].dt.strftime('%m-%d-%Y')

D1.rename(columns={'ICO to': 'ICO_to'}, inplace=True)
D1.ICO_to = pd.to_datetime(D1.ICO_to)

for index, row in D1.iterrows():
    if D1.loc[index, 'Date'] < (D1.loc[index, 'ICO_to']-pd.Timedelta(5, unit='d')):
        D1.drop

但是我得到了错误,参考上面循环中的if语句:

TypeError: Cannot compare type 'Timestamp' with type 'unicode' 

我认为这是因为您不能从 Datetime 值中减去 Timedelta 值,但我不确定。如何使这个 for 循环逻辑工作?

【问题讨论】:

  • 实际上想解决什么问题?您不需要循环,您可以 100% 将其矢量化。我想看看你的预期输出,我可以帮助你:)
  • @COLDSPEED 我有许多不同的加密货币代码都在相同类型的数据帧中,我稍后将它们合并到一个数据帧中。如果 Date 值在 ICO_to 值之前

标签: python pandas datetime for-loop


【解决方案1】:

矢量化您的计算。这是一种方法:

df['Date'] = pd.to_datetime(df['Date'])
df['ICO_to'] = pd.to_datetime(df['ICO_to'])

df = df.loc[~(df['Date'] < (df['ICO_to']-pd.Timedelta(5, unit='d'))), :]

说明

  • 条件~(df['Date'] &lt; (df['ICO_to']-pd.Timedelta(5, unit='d'))) 生成一个布尔数组。 ~ 表示否定。数组的所有True 组件表示保留的行;同样,False 也被删除。
  • documentation 是了解矢量化您的计算的理想场所。

【讨论】:

  • 谢谢,我是 python 的新手,所以我通常使用 for 循环。但是这个向量效果很好。
猜你喜欢
  • 2018-12-30
  • 2020-08-15
  • 1970-01-01
  • 2020-08-13
  • 2017-10-09
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多