2017-09-07 34 views
1

私はutf-8のテキストSMSのcsvファイルを持っています。Python:パンダを使用してCSVファイルからASCII以外の文字を取り除く

import pandas as pd 
data = pd.read_csv('my_data.csv', sep=',') 
data.head() 

ようですが、出力を持っている:私はsms列はそのようなレコード3,4および5のようにゴミ値は、それらが中に書かれていたかもしれませ持つすべてのレコード/行を削除したい

id city department sms     category 
01 khi  revenue  quk respns.    1 
02 lhr  revenue  good.      1 
03 lhr  revenue  †h\0h2h\0hh\    0 
04 isb  accounts  ?xœ1øiûüð÷üœç8i   0 
05 isb  accounts  %â¡ã‘ã¸$ãªã±t%rã«ãÿã©â£ 0 

英語以外の言葉私はこれらの記録に何が起こったのか分かりません。 smsカラムで使用されている言語は非公式です(人々が通常はテキストメッセージで行うように)が、レコード1と2は大丈夫です。私は約200万のレコードを持っているので、それを達成するための便利な方法は何でしょうか。

編集:私はsms列に非ASCII文字を含む任意の行を削除したい 。英数字でない行をフィルタリングする

+0

英語がすべてでないものを除外しようとしているなど、完全な要件が何であるかを明確にすることはできますか?アスキーではない? – EdChum

+0

「sms」の値がASCII以外のすべてのレコードをフィルタリングします。 –

+0

[GSM 03.38](https://www.csoft.co.uk/support/character-sets#gsm_set)はASCII以外の文字をサポートしているため、ascii – EdChum

答えて

4

使用str.isalnum

In[46]: 
df[df['sms'].str.isalnum()] 

Out[46]: 
    id city department   sms category 
0 1 khi revenue quk respns.   1 
1 2 lhr revenue  good.   1 

更新

あなたは本当に、あなたが正規表現パターンを使用することができます非ASCII文字を含むすべての行をフィルタリングしたい場合:

In[72]: 
df[~df['sms'].str.contains(r'[^\x00-\x7F]+')] 

Out[72]: 
    id city department   sms category 
0 1 khi revenue quk respns.   1 
1 2 lhr revenue  good.   1 

ここで、正規表現のパターン'[^\x00-\x7F]+'は、16進数v ASCIIの範囲で最大128(7f)の範囲で0〜128の範囲の文字(128を含まない)を検索し、^を使用してこれを無効にして、テキストのどこにでも非ASCIIの存在を探します。 ~を使用してこのマスクを反転し、これを使用してdfをマスクします

+0

'str.isalnum( 'å')' - > 'True' ...私はOPが非ASCII文字を望んでいるとは思わない。 –

+0

@cᴏʟᴅsOP OPの投稿サンプルでは、​​なぜこれは有効ではないのですか?ガベージ文字のフィルタリング以外のすべての要件は現在明記されていません – EdChum

+0

Err ... fair point。あなたの行が歪んでいます:p –

関連する問題