Chr*_*ris 5 python unicode dataframe pandas
我有一个数据框,我希望在 Python 2.7 中将几行写入文件和记录器中。print(dataframe.iloc[0:4])在数据框中输出列标题和前 4 行的漂亮网格。然而logging.info(dataframe.iloc[0:4])抛出:
UnicodeDecodeError:'ascii' 编解码器无法解码位置 87 中的字节 0xc2:序号不在范围内(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
Run Code Online (Sandbox Code Playgroud)
就像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错误,而且我没有不知道它什么时候会发生,我仍然只是在控制台上进行修复以查看什么会发生,而对正在发生的事情没有任何潜在的了解。
小智 5
使用 python 3 和最新的熊猫,这对我有用......
logging.info('dataframe head - {}'.format(df.head()))
Run Code Online (Sandbox Code Playgroud)
改进 gageorge 的答案,当超过 5 行时,以下效果更好
logging.info('dataframe head - {}'.format(df.to_string()))
Run Code Online (Sandbox Code Playgroud)
参考:https : //pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_string.html
IIUC,您可以尝试encoding='utf-8'在写出数据帧的前 n 行时通过:
df.head(n).to_csv('yourfileout.csv', encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)