🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1210閲覧

[Python]日付を最小値と最大値を入力して、リスト内の日付列と一致したものを抽出したい。

suzumi1

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/05 07:09

編集2021/02/05 07:45

Windows10
VisualStudio Python(3.7 64bit)

Pythonを勉強中の者です。
まずCSVファイルに日付、購入情報を載せたものを作成し、
それをPythonで読み込んで、リストにcsv情報を格納しています。

そこから日付型のテキストを入力して、csvリストの日付の場所を範囲選択し、
一致した行を取り出したいのですがうまくいきません。

(例)csvファイル【列の順番】日付,商品コード,商品名,単価,購入数

2021/1/1,A001,商品A,100,10
2021/1/2,B003,商品B,1200,2
2021/1/3,C004,商品C,1000,3
2021/1/4,D005,商品D,500,5
2021/1/5,E006,商品E,200,5
2021/1/6,F007,商品F,2000,1
2021/1/7,G008,商品G,1300,2
2021/1/8,H009,商品H,2000,1
2021/1/9,I010,商品I,500,20
2021/1/10,J010,商品J,1000,2

Python

1import csv 2import datetime 3from datetime import datetime as dt 4Path = "XXX.csv" 5f = open(Path,"r",encoding="ms932") 6reader = csv.reader(f) 7From_date = dt.strptime("2021/1/2","%Y/%m/%d") 8To_date = dt.strptime("2021/1/6","%Y/%m/%d") 9if From_date and To_date: 10 csv_data=[] 11 for a in reader: 12 while From_date <= a[0] and To_date >= a[0]: 13 csv_data.append(a) 14 print(a)

※やりたいこと
・CSVファイルをループして「2021/1/2」(最小値)から「2021/1/6」(最大値)
csvファイルの日付列と一致した部分の行をリストに格納したい。

〇実現したい表示結果
2021/1/2,B003,商品B,1200,2
2021/1/3,C004,商品C,1000,3
2021/1/4,D005,商品D,500,5
2021/1/5,E006,商品E,200,5
2021/1/6,F007,商品F,2000,1

→上記のプログラムだと、「<=」等の演算子が対応していないようなエラーが出てしまいます。
以下、エラー内容
'<=' not supported between instances of 'datetime.datetime' and 'str'
*追記 エラー内容は自分が理解していないだけでした。比較する方が一致していないようでした。

PandasやNumpyを使ったほうが便利であるのは承知の上ですが、それらを使用せずにやってみたいのです。(検索したらPandasしか載っていなかったので、今回質問させていただきました)
ご教授いただければ幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

errormaker74

2021/02/05 07:27

エラーの内容は理解できていますか。 'datetime.datetime'型と'str'型の比較はできないという意味です。 データの型をそろえてみてはいかがでしょうか。
suzumi1

2021/02/05 07:29

すみません、理解できていませんでした。ありがとうございました!
guest

回答1

0

ベストアンサー

csvから読み込んだ段階では、データは文字列のままなので、datetime.strptimeでdatetime型に変換してやる必要があります。

python

1 for a in reader: 2 cur_date = dt.strptime(a[0], "%Y/%m/%d") 3 while From_date <= cur_date and To_date >= cur_date: 4 csv_data.append(a) 5 print(a)

a[0]を直接置き換えてもいいのかもしれません。

また、ほかの数値の部分も文字列のままなので、あとで数値として使うならば、適宜int等で変換してやる必要があります。

投稿2021/02/05 07:24

bsdfan

総合スコア4794

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzumi1

2021/02/05 07:43

ありがとうございました! a[0]の部分を日付型にしたらできました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問