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

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

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

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

Q&A

解決済

2回答

1612閲覧

特定の列の文字を数値に変換

cesolution

総合スコア217

Python

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

0グッド

2クリップ

投稿2018/04/10 07:04

前提・実現したいこと

いつもお世話になっております。
現在、pandasを使用し、エクセルからデータの抽出を行っております。
その際、ある列に、例えばyes、no、あるいはmale、femaleといった文字列が入っています。
この「yes、no」、「male,female」といった文字列を「0, 1」に変換したいのですが、スマートな方法はございますでしょうか?
私がすぐに思いつくのは、列データを一度配列に格納し、for文で回しながらyesなら1、noなら0と判定していくといった力業しかなく、良い方法がございましたら、ご教授いただけないでしょうか?

該当のソースコード

Python

1 data=pd.read_excel('data.xlsx') 2 sex=data['Sex'] 3 ???

↑上記sexには、male、femaleが入りますが、これを0 or 1に一括変換するスマートな方法はあるでしょうか?

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

Python 3.6

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

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

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

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

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

guest

回答2

0

ベストアンサー

pandas.Series.map() を使う方法が簡単かと思います

Python

1df['Sex'] = df['Sex'].map({'male':0, 'female':1})

投稿2018/04/10 07:21

magichan

総合スコア15898

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

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

cesolution

2018/04/10 07:25

早速のご回答ありがとうございます。 こんな簡単に書けるんですね。 助かりました!
guest

0

applyを使って次のように書けるでしょう。

python

1import pandas as pd 2 3df = pd.DataFrame([["male", "y"], 4 ["female", "y"], 5 ["male", "n"], 6 ["female", "n"]],columns=["sex", "y/n"]) 7 8print(df) 9"""出力 10 sex y/n 110 male y 121 female y 132 male n 143 female n 15 16""" 17 18sex_convert = lambda s :1 if s == "male" else 0 19yn_convert = lambda s: 1 if s == "y" else 0 20 21df["sex"] = df["sex"].apply(sex_convert) 22df["y/n"] = df["y/n"].apply(yn_convert) 23 24print(df) 25"""出力 26 sex y/n 270 1 1 281 0 1 292 1 0 303 0 0 31"""

投稿2018/04/10 07:23

hayataka2049

総合スコア30933

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

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

cesolution

2018/04/10 07:26

ご回答いただきありがとうございます。 lambda関数で定義しておいて、applyするんですね、勉強になります。
arch_

2018/04/10 10:16

0 or 1の判定なら lambda s: int(s == "male") これですっきりします。
hayataka2049

2018/04/10 10:19

どうも個人的に、True/Falseをintとして扱うのは趣味じゃなくて・・・Cならわかるんですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問