4

現在、xに入っている路線名を、辞書line_namesにあるような数字に置き換えたいと考えています。
その際に、xにある路線名以外は、全て欠損値nanにしたいです。
現在は、line_namesのリストと、データとの対応が不完全なので、エラーになりますが、
辞書line_namesに対応を書かずとも、辞書にない文字列は、
欠損値としたいのですが、ご教示頂けるとありがたいです。

大量なデータがあり、どのような文字列が入っているのか、完全に把握できないので、
こちらで、関心ある路線名以外は、全て欠損値扱いしたいからです。

    import pandas as pd
    import numpy as np

df = pd.DataFrame(
    {'x': ['JR山手線',
           'JR総武線',
           '西武池袋線',
           '都営大江戸線',
           'JR中央線',
           'バス',
           '車']})

line_names = {"JR山手線":"1",
        "JR総武線":"2",
        "西武池袋線":"3",
        "都営大江戸線":"4",
        "JR中央線":"5"}

    df['y'] = df.apply(lambda row: line_names[row["x"]], axis=1)
kazusumi
  • 270
  • 2
  • 6
  • 18
  • get() を使うとデフォルト値を指定できます。df['y'] = df.apply(lambda row: line_names.get(row["x"], np.NaN), axis=1) –  Aug 31 '18 at 01:44
  • ご教示ありがとうございます。できました! – kazusumi Aug 31 '18 at 07:25

1 Answers1

2

一番簡単で高速なのはmapを使います。

df['y'] = df['x'].map(line_names)
Yasuhiro Niji
  • 6,524
  • 1
  • 10
  • 24
  • ご教示ありがとうございます。mapをこのように使用できることを知りませんでしたので、大変助かります。 – kazusumi Aug 31 '18 at 07:26