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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

6回答

1428閲覧

Pythonでの質問です。8000行のデータがあるcsvファイルから不要な行を削除しようとしています。

Seigossun

総合スコア11

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

1クリップ

投稿2019/06/14 07:11

編集2019/06/14 07:18

前提・実現したいこと

Pythonの初心者です。よろしくお願いいたします。
8000行のデータがあるcsvファイルから不要な行を削除しようとしています。
8000行のうち必要な行は、
1行目〜40行目
201行目〜240行目
401行目〜440行目
.
.
.
7801行目〜7840行目
までです。
それ以外の行は不要なので削除して再度保存するということをしようとしています。

発生している問題・エラーメッセージ

該当のソースコード

必要な行番号を下記のソースでリスト化できました k =[] for n in range(1,41): for i in range(160,200): needgyou = 200*n-i k.append(needgyou) print(k) ファイルの読み込みは下記のコードです rfile = open('apacche_able_2.csv',encoding='utf-8') csv = rfile.read() rfile.close() p = [csv] print(p) 本当に初心者なので以上で力尽きています。 解決を何卒おねがいいたします。

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

DrqYuto👍を押しています

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

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

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

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

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

stdio

2019/06/14 07:23 編集

その不要な行の条件が判明すれば、それが書かれている行のみを配列の挿入時に弾けばいいだけです。 それか行数分かっているならExcelで開いて省くじゃダメなの?
Seigossun

2019/06/14 07:31

各行のデータはx,y,zの座標データのため行の条件では判別できないのです。 1行目〜40行目 201行目〜240行目 401行目〜440行目 . . . 7801行目〜7840行目 という規則で行のデータが必要となります。 Excelで不要な行を削除するという方法をやってみましたが8000行あるので削除する際にヒューマンエラーを起こしかねないのと延々と削除するのに時間がかかります。 csvファイルがいくつもあるので手作業でするのも限界があると感じました。
maisumakun

2019/06/14 08:00

Pythonでなければならない理由はありますか?
guest

回答6

0

ベストアンサー

pandas をお使いください。

手順

  1. read_csv() で CSV ファイルを読み込む。
  2. 1行 ~ 40行, 200行 ~ 240行, ... を iloc で取得する。
  3. concat() で縦方向に結合する。
  4. to_csv() で書き出す。

サンプルコード

python

1import pandas as pd 2import numpy as np 3 4# 読み込む。 5df = pd.read_csv("sample.csv", index_col=0) 6 7# 1行 ~ 40行, 200行 ~ 240行, ... を結合する。 8df2 = pd.concat([df.iloc[i : i + 40] for i in range(0, len(df.index), 200)]) 9 10# 出力する。 11df2.to_csv("output.csv", index=False)

投稿2019/06/14 09:38

tiitoi

総合スコア21956

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

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

Seigossun

2019/06/14 13:51

ありがとうございます! 初心者なのでまずpandas?となりましたが、pandasをpipでインストールするとい勉強もできました。 無事pandasをインストールし送ってくださったサンプルコードを実行しましたら行を抽出することができました。 csvファイルはx,y,zの座標値でありコードを実行するとx列が抜けていましたがindex_col=Noneにするとx列が表示されました。 また、「1行 ~ 40行, 200行 ~ 240行, ... を iloc で取得する。」と書かれておりましたが実際には「1行 ~ 40行, 201行 ~ 240行, ... 」なので iloc[i : i + 40] を iloc[i : i + 39] にするとうまくいきました。 pandasというのを初めて知りましたのでとても便利なのでもっと勉強してみようと思います。 エクセルで行を選択して削除の繰り返しをするのを考えただけでもうんざりしていたので本当に助かりました。 感謝いたします。
Seigossun

2019/06/15 01:05

前回のコメントで、 csvファイルはx,y,zの座標値でありコードを実行するとx列が抜けていましたがindex_col=Noneにするとx列が表示されました。 また、「1行 ~ 40行, 200行 ~ 240行, ... を iloc で取得する。」と書かれておりましたが実際には「1行 ~ 40行, 201行 ~ 240行, ... 」なので iloc[i : i + 40] を iloc[i : i + 39] にするとうまくいきました。 と書きましたがその必要はありませんでした。 つまり私のcsvファイルにindexの行とindexの列がなかったためうまくいかなかったのであり、indexの行と列をcsvに追加してやれば見事送っていただいたコードでうまくいきました。 感動です!
guest

0

できることから順番に書いてみてください。

  • 読み込んだ内容をそのまま書き出す処理を実装する。
  • 書き出す処理を行単位のループで実装する。
  • ループ内で行番号を取得できるようにする。
  • 行番号が対象行だった場合のみ書き出すようにする。

投稿2019/06/14 07:33

mather

総合スコア6753

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

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

0

8000行くらいであれば手作業で40箇所修正するほうが遥かに早く簡単でいいと思いますよ。

投稿2019/06/14 08:22

YouheiSakurai

総合スコア6142

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

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

0

すでに出ている回答に付け加えて、
同じファイルをそのまま書き換える、というのは事実上無理ですんで、読み込むファイルとは別の名前のファイルを書き込み用にオープンしといて、1行読み込むごとに要不用を判断して書き込むようにすればいいです。
そのうえで、必要とあらば、書き込んだあとに元ファイルを削除、書き込んだファイルを元ファイルの名前にリネーム、とすればいいかと

投稿2019/06/14 07:47

y_waiwai

総合スコア87774

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

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

0

linux のコマンドだけでも処理可能です。
方針だけを述べます。

元ファイルを 200 行ごとに分割したファイル群をつくる。 (split コマンド)
それぞれのファイルの先頭 40 行だけを取り出す。 (head コマンド)
その結果を 1つのフアイルに連結する。 (cat コマンド)

投稿2019/06/15 07:03

katoy

総合スコア22324

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

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

0

むしろPythonで行う意味がほぼないので、VBAでサックと終わらせた方が気楽だと思います。
VBAなら行番号で消せるので、下から上に順番に消すだけで良いと思います。
CSVへの再保存も簡単なのでおススメですよ。

投稿2019/06/14 08:56

stdio

総合スコア3307

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問