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

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

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

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

Q&A

解決済

3回答

817閲覧

python csv 特定の行を削除したい

Tubasa1995

総合スコア83

Python

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

0グッド

2クリップ

投稿2019/01/16 12:34

今,7000行×7000列のcsvファイルがあってそれを読み込んで,その特定の行を削除したいと考えています.そこで削除するのではなく,逆に抽出するという発想でやってみました.
しかし,例えば,下記のようなコードを書いてみたのですが,
これだと1列目がindexで2列目がXとなっているため
7000行×2列のデータ(1列目がindex)のときのみ上手くいきます.

ただ,私は7000列全てから特定の行を消したいです.
そこで質問なのですが,下記のコードのnames=['Index', 'X'])の'X'の部分を全7000列にx,y,z,aa,ab,ac...のように設定することができないでしょうか.

いろいろ調べたのですが,わかりませんでした.
どなたかご教授ください.

import pandas as pd import numpy as np ######################################################################################################## df = pd.read_csv('fullmin_1-7701_3points_2delta.csv') data = pd.read_csv('fullmin_1-7701_3points_2delta.csv', names=['Index', 'X']) indices = (data.Index % 51 != 0) & (data.Index % 51 != 1) extract = data[indices] np.savetxt('rmv_1-7701_3points_2delta.csv', extract, delimiter=',')

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

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

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

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

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

can110

2019/01/16 14:18

提示コードで「特定の行全体を削除(抽出)」はできていると思うのですが やりたいことは読み込み時に全列に対して何らかの規則で名前付けしたいということでしょうか?
Tubasa1995

2019/01/16 14:46

あれ,このコードで行全体できるのですか? すいません,もう一度確認してきます.
Tubasa1995

2019/01/16 14:53

やはり最初の1列目にしか適用されていませんでした. 全部で7000列あるんです.
guest

回答3

0

ベストアンサー

そのためだけに自動で名前を振るのは良いアプローチではありません。どうしてもやりたければ、好きな規則で7000個の名前を生成してnamesに渡す、prefix引数を指定するなど、やり方はいろいろあると思いますが。

data.IndexIndex列を取り出しますが、データの通し番号を得ることが目的ならdata.indexで0から始まるインデックスが得られます。

もし第0列に基づいて選択したいのなら、data.iloc[:,0]のようにして第0列を取り出せます。この場合そもそも列に名前をつけなくても構いません。

投稿2019/01/16 15:21

hayataka2049

総合スコア30933

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

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

Tubasa1995

2019/01/16 17:35

この問題は解決しました. 今新しい質問をしたのですが,多分かなりわかる人でないと難しい?かもしれないコードなので,hayataka2049さん,一度見てアドバイスをいただけませんか?
hayataka2049

2019/01/16 17:39 編集

軽く見てみましたが、申し訳ありませんがVTKフォーマットなどの知識は全くないので、スルーさせてください。
hayataka2049

2019/01/16 17:40

と思ったけど、ぜんぜん関係ないところでこけてるんですね。回答してみますか。
Tubasa1995

2019/01/16 17:41

すいません.1列ずつ処理できたらきっと成功するんです.... ありがとうございます.
guest

0

解決してるらしいですが、QAプラットフォームとして破綻しているので。

これってskiprowslambda x : (x % 51 == 0) or (x % 51 == 1)みたいな指定ではどうなんだろうと思いました。なぜ列を指定しなければならないのか分からないです(7000列抜き出したいというより、7000列あるままをそのまま使いたいだけじゃないかと)

投稿2019/01/17 02:43

papinianus

総合スコア12705

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

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

0

提示コードで「特定の行を削除」はできていると思います。
以下検証コードです。

Python

1import pandas as pd 2import numpy as np 3 4data = pd.DataFrame({'Index':range(10),'X':range(10),'Y':range(10)}) 5print(data) 6 7indices = (data.Index % 3 != 0) & (data.Index % 3 != 1) 8extract = data[indices] 9print(extract) 10""" 11 Index X Y 122 2 2 2 135 5 5 5 148 8 8 8 15""" 16 17np.savetxt('out.csv', extract, delimiter=',') 18""" 192.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00 205.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00 218.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00 22"""

投稿2019/01/16 14:59

can110

総合スコア38233

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

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

Tubasa1995

2019/01/16 15:20

つまり,そのコードで7000列のファイルに対して適用する場合は 7000列分のXやYのようなラベルを決めることになりませんか?
can110

2019/01/16 15:25

ちょっと本来やりたいことが把握できませんが Index以外のさまざまな列に対しても抽出条件を適用したいという趣旨の質問でしょうか? であればhayataka2049さんの回答でよいかと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問