2017-02-28 138 views
2

我有一個數據框我希望在Python 2.7中將幾行寫入文件和記錄器。 print(dataframe.iloc[0:4])輸出數據框中列標題和前4行的好網格。然而logging.info(dataframe.iloc[0:4])拋出:熊貓的寫入或日誌打印輸出Dataframe

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 87: ordinal not in range(128)

這裏是勸慰輸出,工作直接向控制檯或print()(注意²):

In[89]: d.iloc[0:4] OR print(d.iloc[0:4]) 
Out[89]: 
    ISO ID_0  NAME_0 ID_1       NAME_1 ID_2 NAME_2 Area(km.²) Pop2001_Cen Pop2010_Cen HHold2010 Hhold_Size 
0 ARG 12 Argentina  2 Ciudad Autónoma de Buenos Aires  NaN  NaN  203.0 2776138.0  2890151 1150134.0 2.512882 
1 ARG 12 Argentina  2 Ciudad Autónoma de Buenos Aires 2001.0 Comuna 1   NaN  171975.0  205886 84468.0 2.437444 
2 ARG 12 Argentina  2 Ciudad Autónoma de Buenos Aires 2002.0 Comuna 2   NaN  165494.0  157932 73156.0 2.158839 
3 ARG 12 Argentina  2 Ciudad Autónoma de Buenos Aires 2003.0 Comuna 3   NaN  184015.0  187537 80489.0 2.329971 

一樣file.write(dataframe.iloc[0:4])等爲一體的一個列標題包含非ASCII字符。我嘗試過各種各樣的decode()encode()等,但無法避免這個錯誤。

print(d.iloc[0:4])工作,所以另一種方法是使用print(d.iloc[0:4], file=f),但即使與from __future__ import print_function我得到上面的ascii編碼錯誤。

複製這一問題的其他方法是logging.info('Area(km.²)')'Area(km.²)'.decode()

我怎樣才能使這個數據幀?

[編輯:]

我也想從根本上了解我是如何處理字符串編碼/ Python中2.7解碼 - 我已經遠離黑客在本作更多的時間比它值得,因爲這不是隻有我有這個UnicodeDecodeError錯誤,我不知道什麼時候會發生,我仍然只是拋出修復控制檯,看看有什麼堅持,沒有任何根本的理解發生了什麼。

+1

你可以張貼你的原始數據幀的提取物? –

回答

2

IIUC,你可以嘗試通過encoding='utf-8'與寫出數據框的第n行的時候:

df.head(n).to_csv('yourfileout.csv', encoding='utf-8') 
+0

這是行得通的,但有沒有辦法在內存中這樣做,以便我可以將它傳遞給記錄器並寫入包含其他文本的文件?此外,我希望保留「df .__ str__」輸出的列對齊。 – Chris

+0

如果文件名被忽略,'to_csv()'命令輸出到控制檯。我仍然喜歡格式化和解決編碼問題(問題更新 - 對不起法比奧),只是在這裏注意這一點,以防其他人有用。 – Chris

+0

其實我不能重現你的'logging.info'問題......也許[this](http://stackoverflow.com/questions/32686804/encoding-decoding-non-ascii-character-when-using-python-pandas)問題可能會有助於調查python的解碼問題。 –