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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

23842閲覧

csvの特定の行を削除したい、書き込みをしたい

hyugasatsuman5

総合スコア18

CSV

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

Python 3.x

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

0グッド

0クリップ

投稿2018/03/14 14:29

編集2018/03/14 15:35

csvの特定の行を削除したい、書き込みをしたい

csvデータを作成する際に下記のプログラムを作成し

Python

1nsx = [195,20,0] 2import csv 3with open("exam.csv","a",newline="") as f: 4 writer = csv.writer(f) 5 writer.writerow(nsx)

と実行しました
変数nsxの部分を変えつつ、下記のcsvを作成しました

a,b,c 200,20,1 190,10,1 180,10,1 170,10,1 180,20,0 195,20,0

ただ途中から上記のcsvのファイルから特定の行(今回の場合2行目(上記のcsvだと200,20,1))だけを削除したいと思ってます

あともう一つ

a,b,c 200,20,1 190,10,1 180,10,1 170,10,1 180,20,0 195,20,0 190,10

という上記のcsvのデータファイルがあった場合、8行目の末尾に0を書き込みたいと思ってます
つまり、

a,b,c 200,20,1 190,10,1 180,10,1 170,10,1 180,20,0 195,20,0 190,10,0

という形に書き込みたいと思っています
このような場合もどうしたら良いでしょうか

###試したこと

Python

1import csv 2import numpy as np 3import pandas as pd 4import statistics as st 5 6df = pd.read_csv("exam.csv",header=0,encoding='utf-8') 7 8df = df.drop(0) 9df.loc[6]['c'] = 0 10

と行の削除と末尾に追加を試みましたがなんの変化もしませんでした

※一部importで関係ないものがありますが無視してください

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

スペック
Windows8.1
Python3.6.3
PyCharm

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

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

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

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

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

guest

回答2

0

csv_rw.py

python

1import csv 2 3def read_csv(csv_path): 4 data = [] 5 with open(csv_path, 'r') as file: 6 reader = csv.reader(file) 7 for row in reader: 8 data.append(row) 9 return data 10 11def write_csv(csv_path, data): 12 with open(csv_path, 'w', newline='') as file: 13 writer = csv.writer(file) 14 writer.writerows(data) 15 16csv_a_path = "a.csv" 17csv_b_path = "b.csv" 18data = read_csv(csv_a_path) 19del data[1] 20write_csv(csv_b_path, data) 21 22csv_a1_path = "a1.csv" 23csv_b1_path = "b1.csv" 24data = read_csv(csv_a1_path) 25data[-1].append(0) 26write_csv(csv_b1_path, data) 27

参考情報

  • Python3と2でのcsvファイル読み込み・書き出し(文字コードUTF-8対応編)

https://web.plus-idea.net/2017/06/python3-2-csv-file-read-write-utf8/

投稿2018/03/14 16:25

katoy

総合スコア22324

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

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

0

ベストアンサー

Python

1import pandas as pd 2 3df = pd.read_csv('csvの名前.csv') 4df = df.drop(0) #一番上のデータ行、ここでは200,20,1を削除 5df.loc[6]['c'] = 0 #0を追加

多分これで行けると思います。locの中の番号はDataFrameの一番左に出で来る数字を表しています。(コマンドラインでdfと打てば出てくる)

編集したDataFrameを保存する際には

Python

1df.to_csv('csvファイル名.csv', index=False) #index = Falseにすることで一番左の数字を省ける

とします。元のファイルに上書きしたいときには元のファイルと同じ名前で保存すればよいです。

投稿2018/03/14 14:44

編集2018/03/14 15:26
Yhaya

総合スコア439

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

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

hyugasatsuman5

2018/03/14 15:15

回答有り難うございます 上記の様に実行してみましたが残念ながらcsvファイル自体はなにも変わってないです
Yhaya

2018/03/15 03:42

回答に追記したので試してみてください
hyugasatsuman5

2018/03/16 23:17

返信遅れて申し訳ありません 下段のプログラム実行してみましたが行を削除するということはできました ありがとうございます ただ0を追加するところができません ```Python import csv import numpy as np import pandas as pd import statistics as st df = pd.read_csv("exam.csv",header=0,encoding='utf-8') df.loc[6]["c"] = 0 df.to_csv("exam.csv",index=False) ``` と上記を実行して下記のようにdfを出力 ```Python import pandas as pd import csv df = pd.read_csv("exam.csv") print(df) ``` ``` a b c 0 200 20 1.0 1 190 10 1.0 2 180 10 1.0 3 170 10 1.0 4 180 20 0.0 5 195 20 0.0 6 190 10 NaN ``` と上記の結果になってしまいます
Yhaya

2018/03/17 05:31

本当ですね。 こちらで試行錯誤やってみたところdf.loc[6]["c"] = 0のところをdf.loc[6,"c"] = 0に変えたらできました。そちらでも試してみてください。
hyugasatsuman5

2018/03/18 01:08

返信ありがとうございます 上記の方に修正しましたらできました 本当にありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問