TypeError: ‘<' not supported between instances of 'Timestamp' and 'str'

Python
本ページはプロモーションが含まれています

はじめに

Pythonで大量のcsvファイルのデータを解析している時にエラーが発生しました。

これはファイルの読み込み(pandasを使用)を行った後にデータを編集する際に起きたのですが、このエラーは割りと発生する確率があると思いメモに残すことにしました。

エラーの原因&サンプルプログラムと対処方法

エラー

まず発生したエラーメッセージですが、

TypeError: '<' not supported between instances of 'Timestamp' and 'str'

というものでした。(比較演算子'<'は条件によって異なります)
訳すと
「タイプエラー:'<‘はTimestampとStr型の間のインスタンスではサポートされていません」
と言っています。

このエラーは異なるタイプの型を比較する事で発生することが原因でした。

サンプルプログラム

実際にエラーが発生するソースを見てみましょう。

import pandas as pd

df = pd.DataFrame({'date': ['2020-01-01', '2020-02-01', '2020-03-01']})
df['date'] = pd.to_datetime(df['date'])

some_timestamp = pd.Timestamp('2020-02-15')

if some_timestamp < '2020-01-15':
    print('The timestamp is earlier than January 15, 2020')

これを実行すると

if some_timestamp < '2020-01-15':

TypeError: '<' not supported between instances of 'Timestamp' and 'str'

というようにエラーが。

上記のコードでは、pandasのTimestamp型の変数と文字列を比較(8行目)しているため、エラーメッセージ 「TypeError: ‘<‘ not supported between instances of ‘Timestamp’ and ‘str’ 」が出力されます。

ソースコードを次の様に直すとエラーは表示されなくなります。

import pandas as pd

df = pd.DataFrame({'date': ['2020-01-01', '2020-02-01', '2020-03-01']})
df['date'] = pd.to_datetime(df['date'])

some_timestamp = pd.Timestamp('2020-02-15')

if some_timestamp < pd.to_datetime('2020-01-15'):
    print('The timestamp is earlier than January 15, 2020')

上記の修正後のコードでは、比較前に文字列をTimestamp型に変換(8行目)しています。
その結果、Timestamp型の変数と比較しているため、エラーは発生しません。

このエラーが発生するのは、文字列とpandasのTimestamp型を直接比較しようとした場合なので解決策としては、比較を行う前に文字列をTimestamp型に変換する必要があります。

さいごに

今回はPythonでPandasのTimestampと文字列を比較してエラーが出るケースでした。
基本的に異なる型を比べるとエラーが発生しるので比較の際は注意が必要ですね。

日付のデータというのはソートや比較でよく使うので特に注意が必要かもしれません。

この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました