写入或记录pandas Dataframe的打印输出

时间:2017-02-28 17:47:24

标签: python pandas dataframe unicode

我有一个Dataframe我希望在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

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中处理字符串编码/解码 - 我一直在捣乱这个时间超过它应得的时间,因为这不是我唯一的时间{{ 1}}错误,我不知道它什么时候会发生,我仍然只是在控制台上修复一些问题,看看有什么问题,而不知道发生了什么。

3 个答案:

答案 0 :(得分:3)

改善gageorge的答案,当行数超过5时,跟踪效果会更好

logging.info('dataframe head - {}'.format(df.to_string()))

参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_string.html

答案 1 :(得分:2)

IIUC,您可以尝试在写出数据帧的前n行时传递encoding='utf-8'

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

答案 2 :(得分:1)

使用python 3和最新的熊猫,这对我有用...

logging.info('dataframe head - {}'.format(df.head()))