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と文字列を比較してエラーが出るケースでした。
基本的に異なる型を比べるとエラーが発生しるので比較の際は注意が必要ですね。

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

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

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