2016-10-20 1 views
1

ので、私はほとんどの非常に大きなデータフレームは(CSVから読み込ん)が、すべてが今して、私はのpython、パンダは、不良データを介して動作

      date load 
0 2016-07-12 19:04:31.604999 0 
... 
10 2016-07-12 19:04:31.634999 nan 
... 
50 2016-07-12 19:04:31.664999 ".942.197" 
... 

I文字列を取得、またはNaN浮かぶんです(補間)NaNを扱うことができますが、文字列をキャッチするために置き換える使用する方法を見つけ出すことはできませんし、ない数字

df.replace(to_replace='^[a-zA-Z0-9_.-]*$',regex=True,value = float('nan')) 

戻り、すべてのNaN。私はそれが実際に文字列であるときだけのためのナンではありません

+0

あなたは 'something weird'の例を投稿できますか? –

+0

文字列が唯一の問題です。私の質問から「何か奇妙なもの」が削除されました。 –

答えて

2

私はあなたがほしいと思うpandas.to_numericと思う。それはシリーズのようなデータで動作します。

In [5]: df = pd.DataFrame([0, float('nan'), '123.456'], columns=['load']) 

In [6]: df 
Out[6]: 
     load 
0  0 
1  NaN 
2 123.456 

In [7]: pd.to_numeric(df['load'], errors='coerce') 
Out[7]: 
0  0.000 
1  NaN 
2 123.456 
Name: load, dtype: float64 

私はすべてを変換する方法を知りません:あなたはそれが変換されます番号のように見える文字列を持っているので、もし

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([0, float('nan'), '.942.197'], columns=['load']) 

In [3]: df 
Out[3]: 
     load 
0   0 
1  NaN 
2 .942.197 

In [4]: pd.to_numeric(df['load'], errors='coerce') 
Out[4]: 
0 0.0 
1 NaN 
2 NaN 
Name: load, dtype: float64 

実はto_numericは、数字にすべての項目を変換しようとします数字以外のタイプをnanに、反復以外(またはapplyまたはmapを使用)、isinstanceをチェックしてください。

+0

これは992344という値になりました(私のデータが0と1の間にあることを知っているときには巨大なものです)ので、私はdf = df [df <1]をフォローアップしなければなりませんでした。ありがとう! –

+0

@ user2539738はい、サンプルに数値文字列がないため、その部分をスキップしました。編集を参照してください。エレガントで効率的な方法で、すべての文字列を 'nan'に変換する方法がわかりません。 – Goyo

0

.replace()は、の文字列のデータ型にのみ適用されます。非文字列データ型(数値型など)に適用すると、それはnanを返します。置き換えを使用する前にフレーム/シリーズ全体を文字列に変換するとこの問題は回避されますが、おそらくこれを行う「最良の」方法ではありません(例:@Goyoの答えを参照)。

thisの注記を参照してください。

関連する問題