2017-05-30 4 views
0

pandasデータフレーム列のテキストから非アスキー文字(例:§±§•¿μ'‡»Ž®º¹¹)を削除するにはどうすればよいですか?pandasデータフレーム列のテキストから非アスキー文字(例:§±§•¿μ'‡»Ž®º¹¹)を削除するにはどうすればよいですか?

私は次のことを試してみましたが、運

df = pd.read_csv(path, index_col=0) 
for col in df.columns: 
for j in df.index: 
    markup1 = str(df.ix[j, col]).replace("\r", "") 
    markup1 = markup1.replace("\n", "") 
    markup1 = markup1.decode('unicode_escape').encode('ascii','ignore').strip() 
soup = BeautifulSoup(markup1, 'lxml') 
df.ix[j, col] = soup.get_text() 
print df.ix[j, 'requirements'] 

は、私は正規表現使用してみましたまだありません、それは動作しません。

markup1 = str(df.ix[j, 'requirements']).replace("\r", "") 
markup1 = markup1.replace("\n", "") 
markup1 = re.sub(r'[^\x00-\x7F]+', ' ', markup1) 

私はまだ非ASCII文字を取得し続けます。どんな提案もありがとうございます。

私は下にDFの最初の3行を追加しました:

           col1    col2 \ 
1.0       H1B SPONSOR FOR L1/L2/OPT US, NY, New York 
2.0        Graphic/Web Designer  US, TX, Austin 
3.0 Full Stack Developer (.NET or equivalent + Jav...    GR, , 

       col3 col4 \ 
1.0     NaN NaN 
2.0 Sales and Marketing NaN 
3.0     NaN NaN 

               col5 \ 
1.0 i28 Technologies has demonstrated expertise in... 
2.0 outstanding people who believe that more is po... 
3.0            NaN 

               col6 \ 
1.0 Hello,Wish you are doing good...              ... 
2.0 The Graphic/Web Designer will manage, popula... 
3.0 You?ll have to join the Moosend dojo. But, yo... 

               col7 \ 
1.0 JAVA, .NET, SQL, ORACLE, SAP, Informatica, Big... 
2.0 Bachelor?s degree in Graphic Design, Web Desig... 
3.0 ? .NET or equivalent (Java etc.)? MVC? Javascr... 

               col8 col9 
1.0            NaN f 
2.0 CSD offers a competitive benefits package for ... f 
3.0 You?ll be working with the best team in town..... f 

答えて

1

オプション1 - あなたは、非ASCII文字の完全なセットを知っている場合:

df 
Out[36]: 
     col1 col2 
0 aa᧕¿µbb abcd 
1   hf4 efgh 
2   xxx ijk9 

df.replace(regex=True, to_replace=['Ð', '§', '±'], value='') # incomplete here 
Out[37]: 
     col1 col2 
0 aa•¿µbb abcd 
1  hf4 efgh 
2  xxx ijk9 

オプション2 - 非アスキー文字のセット全体を指定できない場合:

0を使用することを検討してください:

印刷可能と見なされるASCII文字列。

from string import printable 

printable 
Out[38]: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~ \t\n\r\x0b\x0c' 

df.applymap(lambda y: ''.join(filter(lambda x: 
      x in string.printable, y))) 
Out[14]: 
    col1 col2 
0 aabb abcd 
1 hf4 asdf 
2 xxx  

データフレームの要素は、すべての非ASCIIであるならば、それだけで置き換えられることに注意してください「」。

+0

コメントありがとうございました。私は次のようにオプションを試しましたが、ASCII以外の文字はまだデータフレームにあります。 'df.replace(regex = True、to_replace = ['¢'、 '€'、 '£'、 'Ã'、 '¬'、 'Ð'、 '±'、 '½'、 '©'、 ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '、' = ''、inplace = True) ' –

+0

これは変です。その正確な操作を非ASCII文字で 'df'の例で使用すると、' df'が取り除かれた状態で返されます。 dtypesとは何ですか?また、私はPython 3.5に入っていますが、なぜそれが効果があるのか​​わかりません。 –

+0

私はPython 2.7を使用します。 dtypesはオブジェクトです –

0

ブラッドさんの答えからインスピレーションを得て、私は[0-9] [a-z] [A-Z]のアスキー値のリストを使用して問題を解決しました。

def remove_non_ascii(text): 
L = [32, 44, 46, 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103, 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122] 
text = str(text) 

return ''.join(i for i in text if ord(i) in L) 
関連する問題