当to_latex时,Pandas用任意数字替换NAN

时间:2016-09-19 09:32:23

标签: python pandas nan

我有一个很大的多索引多列数据框df,我没有在这里显示。我生成一个像这样的索引片段:

subDf = df.sort_index(level=0).loc[:'e']

此片段在索引的第二级包含NaN

>>> subDf.iloc[0:1]
                  change
robustness value        
baseline   NaN     -14.5

to_csv()生成的csv似乎是正确的:

>>> subDf.iloc[0:1].to_csv()
Out[15]: 'robustness,value,change\nbaseline,,-14.5\n'

同样地,to_html()的功能与被驱逐的一样。但是,当我尝试获取latex_output时,NaN消失并显示50.00

>>> subDf.iloc[0:1].to_latex()
Out[14]: u'\\begin{tabular}{llr}\n\\toprule\n                &       &  change \\\\\nrobustness & value &         \\\\\n\\midrule\nbaseline & 50.00 &   -14.5 \\\\\n\\bottomrule\n\\end{tabular}\n'

50.00不是完全任意的数字,它是原始数据框中多索引的第二层中的最后一个值:

>>> df.index
Out[18]: 
MultiIndex(levels=[[u'a', u'b', u'c', u'd', u'e', u'baseline', u'f'], [0.01, 0.04, 0.25, 0.75, 0.86, 0.99, 1.0, 2.0, 4.0, 10.0, 50.0]],
           labels=[[5, 6, 6, 2, 2, 1, 3, 3, 3, 4, 4, 0, 0], [-1, 0, 1, 2, 3, 9, 6, 7, 8, 4, 5, 9, 10]],
           names=[u'robustness', u'value'])

出现两个问题:

  • 为什么这首先发生?
  • 如果这确实是我在短期内无法影响的意外行为,我该怎样绕过这一点并强制to_latex()打印出NaN

1 个答案:

答案 0 :(得分:1)

这可能为时已晚,无法帮助,但对后人来说,但我认为这些方法中的任何一种都应该有效:

  1. NaN s的列转换为字符串;这将在LaTeX中为您提供nan

  2. 如果您希望NaN而不是nan,则可以执行1.然后替换,或者您可以执行df.fillna('NaN')

  3. 显然,这些方法会以不利于进一步分析的方式修改您的数据框架,但我认为这是一个简单的解决方法;只需先复制一下数据框。

    (我在仅使用单级索引的数据框架上测试了这些方法,但我无法想象它对于多级别会有所不同)