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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

567閲覧

Pythonにおいて、CSVファイルの要素によって置換する条件を変える方法

green2021

総合スコア16

CSV

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

Python 3.x

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

0グッド

0クリップ

投稿2023/01/25 01:01

前提

使用言語はPythonです。

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・PythonにてCSVファイルの要素によって置換する条件を変える方法が知りたいです。
・具体的な内容として、csvファイルのすべての要素において
①文字数が0(空のデータ)のものは、0と記入
②文字数が1文字以上のものは、1と記入
③1列目のみはキーとして、そのまま値を残したいです。
④①、②、③を踏まえてCSVを出力

今回は、簡素なCSVを例に出しますが実際は列数が150以上、行数は1000以上のものを取り扱います。

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

拙いながらもコードを書いてみたものの、置換されておりませんでした。 また、この方法で書いた場合CSVへの出力方法が分かりません。 ご教授いただければ幸いです。

該当のソースコード

import pandas as pd import numpy as np df = pd.read_csv('TEST.CSV',encoding="cp932",dtype='object') # print(df) for idx,val in df.items(): if len(val) == 0: val_re0 = val.replace(str(val),0) print(val_re0) elif len(val) > 0: val_re1 = val.replace(str(val),1) print(val_re1) #TEST.CSV 名前,性別,年齢,出身地,血液型 太郎,男,20,東京,A 次郎,男,18,, 花子,女,,神奈川, 由美,女,19,京都,O 拓也,,16,大阪,AB #理想の出力結果 名前,性別,年齢,出身地,血液型 太郎,1,1,1,1 次郎,1,1,0,0 花子,1,0,1,0 由美,1,1,1,1 拓也,0,1,1,1

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

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

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

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

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

can110

2023/01/25 01:22 編集

(記載欄を間違えていたので削除)
guest

回答2

0

ベストアンサー

python

1import pandas as pd 2 3# na_filter=None を追加 4df = pd.read_csv('TEST.CSV',encoding="cp932",dtype='object', na_filter=None, index_col=['名前']) 5df = df.applymap(len).clip(0, 1) 6df.to_csv('output.csv')

output.csv

csv

1名前,性別,年齢,出身地,血液型 2太郎,1,1,1,1 3次郎,1,1,0,0 4花子,1,0,1,0 5由美,1,1,1,1 6拓也,0,1,1,1

もしくは、

python

1df = pd.read_csv('TEST.CSV', encoding="cp932", dtype='object', index_col=['名前']) 2df = df.apply(pd.notna).astype(int)

投稿2023/01/25 01:35

編集2023/01/25 02:10
melian

総合スコア19761

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

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

0

名前列をインデックスとして読み込んだうえでapplymapで全要素に対してNaNではないかを判定すればよいかと思います。

Python

1import pandas as pd 2from io import StringIO 3s = """名前,性別,年齢,出身地,血液型 4太郎,男,20,東京,A 5次郎,男,18,, 6花子,女,,神奈川, 7由美,女,19,京都,O 8拓也,,16,大阪,AB""" 9df = pd.read_csv(StringIO(s), dtype=object, index_col='名前') 10 11df = df.applymap(lambda e:not pd.isna(e)).astype(int) 12print(df) 13df.to_csv('ret.csv') 14""" 15名前,性別,年齢,出身地,血液型 16太郎,1,1,1,1 17次郎,1,1,0,0 18花子,1,0,1,0 19由美,1,1,1,1 20拓也,0,1,1,1 21"""

投稿2023/01/25 01:21

can110

総合スコア38262

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問