2017-03-02 8 views
1

私はPythonの初心者です。私はSQL Serverからデータを読み込み、データをcsvファイルに書き出します。テーブル行には、数値、文字列、日時の両方の値があります。私はデータを書き込むさまざまな方法を試しました。たとえば、UnicodeEncodeError: 'charmap'コーデックは、文字 ' u5347'を位置68にエンコードできません:文字マップは<undefined>になります。

#method 1 
import pandas as pd 

df = pd.DataFrame(table, columns=["colummn"]) 

df.to_csv('list.csv', index=False)* 

#method 2 
import csv 

fl = open('OnlineplayDatabase.csv', 'w') 

writer = csv.writer(fl) 

for row in table: 

    writer.writerow(row) 

fl.close()  

通常、両方の方法が動作しています。しかし、一部の行に漢字が含まれていると(下記の例を参照)、エンコードエラーが発生しました。エラーメッセージには、

codecs.charmap_encode(input,self.errors,encoding_table)[0] 

#Error Code 
UnicodeEncodeError: 'charmap' codec can't encode character '\u5347' in position 68: character maps to <undefined> 

utf-8を使用して行のフィールドをエンコードしようとしました。しかし、いくつかのフィールドは数字です。

ご協力いただきありがとうございます。

('120.239.9.116 ', 
'gyandroid ', 
4, 
9, 
'Dalvik/1.6.0(Linux;U;Android4.4.2;升级版Build/KVT49L)                  datetime.datetime(2016, 6, 11, 20, 54, 19), 
datetime.datetime(2016, 6, 11, 20, 56, 53), 
11521.0) 

答えて

0

エラーをもう一度見てください。これは、データフレームのどこかに\uで始まる単語があるために起こります。あなたはそれを取り除く必要があります。これが機能するかどうか確認してください。以下のremove_u関数を使用して、\uを取り除いてください。

def remove_u(word): 
    word_u = (word.encode('unicode-escape')).decode("utf-8", "strict") 
    if r'\u' in word_u: 
     # print(True) 
     return word_u.split('\\u')[1] 
    return word 

df.loc[:, 'colummn'] = df['colummn'].apply(func = remove_u) 

データフレームを更新したら、もう一度書き出してください。

EDIT

私はあなたのコラムを想定していますが、個々の単語で構成されています。列に文字列が含まれている場合は、remove_uの変更バージョンを使用してください。

def remove_u(input_string): 
    words = input_string.split() 
    words_u = [(word.encode('unicode-escape')).decode("utf-8", "strict") for word in words] 
    words_u = [word_u.split('\\u')[1] if r'\u' in word_u else word_u for word_u in words_u] 
    # print(words_u) 
    return ' '.join(words_u) 
関連する問題