我有一个很大的多索引多列数据框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
?答案 0 :(得分:1)
这可能为时已晚,无法帮助,但对后人来说,但我认为这些方法中的任何一种都应该有效:
将NaN
s的列转换为字符串;这将在LaTeX中为您提供nan
。
如果您希望NaN
而不是nan
,则可以执行1.然后替换,或者您可以执行df.fillna('NaN')
。
显然,这些方法会以不利于进一步分析的方式修改您的数据框架,但我认为这是一个简单的解决方法;只需先复制一下数据框。
(我在仅使用单级索引的数据框架上测试了这些方法,但我无法想象它对于多级别会有所不同)