質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Python

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

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

435閲覧

Pythonを用いてExcelの列の特定の数字が2回以下続いた場合、空欄にするプログラムを作成したい

Malbatross

総合スコア6

Python

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

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2021/09/07 14:31

前提・実現したいこと

作成してあるExcelファイルのD列を取得して特定の値(今回は60.59999999999999)が2回以下続いた場合は空欄にするプログラムを作成したいです。
そして空欄にした値をF列に書き込みたいです。

例:
D列  F列
5.4  5.4
50.5  50.5 
12.5 12.5
60.6 60.6
60.6 60.6
60.6 60.6
60.6 60.6
48.5 48.5
60.6
60.6
41.2 41.2
60.6
45.9 45.9

例のようにD列から右のようなF列にしたい。
プログラミング初心者なため助言をいただけると嬉しいです。

該当のソースコード

Python

1from openpyxl import load_workbook 2 3# Excelファイルのロード 4excel_path = 'test.xlsx' 5workbook1 = load_workbook(filename=excel_path, data_only=True) 6ws = workbook1.active 7 8# シートを取得 9sheet1 = workbook1['sheet1'] 10 11lastrow = sheet1.max_row 12 13r = 0 14 15for j in range(2, lastrow + 1): 16 #  D列のセル取得 17 h = sheet1['D' + str(j)].value 18 if h == 60.59999999999999: 19 r += 1 20 if r >= 3: 21 sheet1['F' + str(j)].value = h 22 print(h) 23 elif r <= 2: 24 pass 25 else: 26 r = 0 27 sheet1['F' + str(j)].value = h 28 29 30# 作成したExcelファイルを保存する 31workbook1.save('test.xlsx') 32 33# ロードしたExcelファイルを閉じる 34workbook1.close()

試したこと

現状として
D列  F列
5.4  5.4
50.5  50.5 
12.5 12.5
60.6
60.6
60.6 60.6
60.6 60.6
48.5 48.5
60.6
60.6
41.2 41.2
60.6
45.9 45.9

上記のような処理が行われています。
60.6が二回以下の場合が全て記入されていない状態です。

elif r <= 2:
pass

この部分のコードが悪さをしていると思うのですが、改善方法が思いつきません。助言をお願い致します。

補足情報(FW/ツールのバージョンなど)

python 3.8.10

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

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

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

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

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

guest

回答1

0

ベストアンサー

アルゴリズムの問題なので細かい修正ではどうにもなりません。

以下を参考にして作り直してください。

python

1>>> data = [5.4, 50.5, 12.5, 60.6, 60.6, 60.6, 60.6, 48.5, 60.6, 60.6, 41.2, 60.6, 45.9] 2>>> 3>>> N = 2 4>>> M = 60.6 5>>> 6>>> indices = [] 7>>> cont = [] 8>>> 9>>> for i in range(len(data)): 10... if data[i] == M: 11... cont.append(i) 12... else: 13... if len(cont) <= N: 14... indices.extend(cont) 15... cont = [] 16... 17>>> result = data.copy() 18>>> for i in indices: 19... result[i] = None 20... 21>>> print(result) 22[5.4, 50.5, 12.5, 60.6, 60.6, 60.6, 60.6, 48.5, None, None, 41.2, None, 45.9]

投稿2021/09/07 23:38

ppaul

総合スコア24666

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

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

Malbatross

2021/09/08 08:50

ppaulさんありがとうございました。リスト化してすることで完成しました。参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問