はじめに
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と文字列を比較してエラーが出るケースでした。
基本的に異なる型を比べるとエラーが発生しるので比較の際は注意が必要ですね。
日付のデータというのはソートや比較でよく使うので特に注意が必要かもしれません。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。