2017-01-25 18 views
0

問題データフレーム列から特殊文字( )を削除できないようです。パンダ:トリッキーなUnicodeデータフレーム変換時のバグ

背景:私はスクリーンショットとしてUTF8エンコードにウェブからダウンロードした株価履歴のデータフレーム(link to CSV).私は毎日取引量を含む列に.apply()をしようとしてきた、すなわち、「ボリューム」を持っていますショー以下、.apply()は、最初の文字列からすべてのカンマを削除しintに結果を変換するためにラムダを使用しています。このラムダがcharに当たると....だけでなく、あなたが想像することができます。

通常の変換strからのintまたはfloatがpandasにあります。私は数時間のSOを検索しても問題を解決できないようですユニコードを変換/削除するためのソリューションの試行。

最終的には、文字列からすべての特殊文字/ユニコードを削除する機能が必要です。または、単にutf8と同等のものに変換してブール値のマスクを作成してください。そのためCSVライン2093におけるごみの

コード Err Report from Code

+0

ライン2093 CSVで、その中にゴミを持っています。 'int'を呼び出す前に、入力を修正するか、それをサニタイズして空の文字列をチェックしてください。再現可能な例を示し、より良いアドバイスを提供することができます。 –

+0

@MarkTolonenそのゴミは私が取り除こうとしていたものです。もっと重要なのは、将来的に外部から来るデータにこのようなゴミが含まれていると、私はそのようなゴミをすべて避けたいのです。 MaxUは実用的なソリューションを提供しました。 – Adestin

答えて

0

ソリューション:これは動作するはず

df = pd.read_csv(filename) 

df.Volume = pd.to_numeric(df.Volume.str.replace(',', ''), errors='coerce') 
0

、数字のみを維持し、空の文字列の条件のための余分な先行ゼロを追加します。

lambda x: int('0'+re.sub('[^0-9]','',x)) 
+0

'int( '')'は依然として上がります。 –

+0

int( ' ')とint( '')の両方がValueErrorを返します。int()の基数10のリテラルが無効です。 –

0

はあなたのためのファイルをダウンロードして試してみましたそれを出す。

[re.sub(r'[^\x00-\x7F]+','0', i.decode('utf-8').replace(',','')) for i in test.Volume] 
関連する問題