質問編集履歴

1 誤記修正

mini1988

mini1988 score 42

2018/06/08 08:00  投稿

[python] データフレームの列に含まれる「数字+NaN+文字」の「文字」の部分だけを数字に置換したい
pandasのデータフレーム(dtype:object)の中に、「数字+NaN+文字」が含まれた列が存在しています。(文字は「なし」という日本語が該当します)
pandasのデータフレーム(dtype:object)の中に、「数字+NaN+文字」が含まれた列が存在しています。(文字は「存在しない」という日本語が該当します)
この列に対して、「文字(=存在しない)」の部分を「数字の"0"」に置換、他はそのままで「数字+NaN+文字」の状態から「数字+NaN」の状態にしたいのですが、思うようにコードが書けません。
どなたかご教示いただけないでしょうか?お手数ですが、よろしくお願いします。
### データフレームの列の中身
```ここに言語を入力
df[df.columns[0]]
Out[4]:
3     0.1
4     0.1
5     存在しない
6     NaN
7     0.1
8     NaN
9     0.1
10    1.1
.
.
.
990    存在しない
991    存在しない
992   0.25
993   NaN
994    存在しない
995   NaN
996   NaN
997   NaN
998   NaN
Name: ABC, Length: 896, dtype: object
```
### 期待している姿
私が期待しているのは、「文字(=存在しない)」の部分を「数字の"0"」に置換、他はそのままで「数字+NaN+文字」の状態から「数字+NaN」の状態にして、列全体をfloat型にすること、です。
```ここに言語を入力
df[df.columns[0]]
Out[5]:
3     0.1
4     0.1
5     0.0
6     NaN
7     0.1
8     NaN
9     0.1
10    1.1
.
.
.
990   0.0
991   0.0
992   0.25
993   NaN
994   0.0
995   NaN
996   NaN
997   NaN
998   NaN
Name: ABC, Length: 896, dtype: float64
```
### 私が書いたコード
```
df[df.columns[0]]=df[df.columns[0]].map({'存在しない':0.0}).astype(float)
```
### 私が書いたコードでの出力結果
私が書いたコードでは、「存在しない」の部分は0に変換されるのですが、もともと「数字、NaN」だったところがすべてNaNになってしまいます。
```
df[df.columns[0]]
Out[6]:
3     NaN
4     NaN
5     0.0
6     NaN
7     NaN
8     NaN
9     NaN
10    NaN
990   0.0
991   0.0
992   NaN
993   NaN
994   0.0
995   NaN
996   NaN
997   NaN
998   NaN
Name: ABC, Length: 896, dtype: float64
```
  • Python 3.x

    14256 questions

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

  • pandas

    1645 questions

    Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る