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

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

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

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

pandas

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

Q&A

解決済

1回答

771閲覧

統一性の無い欠損値を処理する方法

raurau4471

総合スコア13

Python

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

pandas

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

0グッド

1クリップ

投稿2020/05/24 11:19

編集2020/05/24 11:22

前提・実現したいこと

以下のようなDataFrameにおいて、Precipitation列に存在する欠損値を処理しようとしています。欠損値は統一された表記がなされておらず、「NaN」「-9999」「欠測」「欠損」のように様々です。
このように統一性の無い欠損値を上手く処理する方法はないでしょうか?
最終的には線形補間を行いたいと考えています。

python

1df.head() 2 3# datetime Precipitation 4#2012-07-01 01:00:00 0.0 5#2012-07-01 02:00:00 0.0 6#2012-07-01 03:00:00 0.0 7#2012-07-01 04:00:00 1.0 8#2012-07-01 05:00:00 0.0

python

1df.dtypes 2 3#Precipitation object 4#dtype: object

経緯

そもそもPrecipitation列をfloat型に変換しようとしたところ、

python

1df['Precipitation'] = df['Precipitation'].apply(lambda x: x.astype('float64')) 2 3#ValueError: could not convert string to float: '\u3000\u3000\u3000欠測'

このようなエラーが発生してしまい、元のデータを確認してみたら様々な形式の欠損値が判明したというのが現在までの経緯です。replaceで全てのパターンを置換するという力業でなんとかしている状態なので、もっとスマートな方法が無いものかと考えています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

例外発生に任せた力業とも言えなくはないですが、引数をfloatに変換しようとしてエラーになったらNaNに挿げ替えてしまう関数をapplyすれば良いかと考えます。

python

1import sys 2import numpy as np 3import pandas 4 5NaN = np.nan 6 7def try_astype(x): 8 try: 9 return float(x) 10 except: 11 return NaN 12 13# テストデータ 14l = [1,1.5,0.12345,'欠損','欠測'] 15df = pandas.DataFrame(l,columns=['Precipitation']) 16print(df['Precipitation'].apply(try_astype)) 17

投稿2020/05/24 13:38

hope_mucci

総合スコア4447

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

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

raurau4471

2020/05/24 13:50

エラー発生を逆に利用してしまうという発想は無かったです、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問