使用带有pandas.DataFrame.applymap的格式化程序函数无效

时间:2018-04-11 12:31:34

标签: python pandas dataframe python-applymap

我有以下CSV文件,我想阅读并重新格式化pandas:

10,1.89e-3,1.92e-3,2.14e-3,2.23e-3,2.38e-3,2.43e-3,2.33e-3,2.87e-3
10,1.84,2.01,2.03,1.99,2.11,2.11,2.09,1.95
20,5.28e-4,4.77e-4,5.23e-4,5.62e-4,5.50e-4,5.64e-4,5.46e-4,7.45e-4
20,1.45,2.00,1.89,1.98,2.08,2.12,2.07,2.15
40,1.93e-4,1.19e-4,1.41e-4,1.42e-4,1.30e-4,1.30e-4,1.30e-4,1.68e-4
40,1.17,2.00,1.61,1.88,2.01,2.03,2.01,1.96
80,8.60e-5,2.98e-5,4.61e-5,3.86e-5,3.23e-5,3.18e-5,3.22e-5,4.33e-5
80,1.06,2.00,1.32,1.69,2.01,2.02,2.01,2.07
160,4.12e-5,7.46e-6,1.85e-5,1.20e-5,8.00e-6,7.82e-6,7.99e-6,1.03e-5
160,1.02,,1.14,1.42,2.00,2.00,2.01,2.13
320,2.03e-5,1.95e-6,8.40e-6,4.47e-6,2.00e-6,,1.99e-6,2.36e-6

我已将其命名为test.csv'。我希望所有浮动格式都使用"%.2f"格式化,如果它们大于1且小于10,其余格式为"%.4e"。这是我到目前为止所尝试的:

import pandas as pd

columns = ["A", "B", "C", "D", "E", "F",
           "G", "H", "I"]

df = pd.read_csv('test.csv', names=columns)

def format_data(value):
    try:  
        fvalue = float(value)
        if ((fvalue > 1) and (fvalue < 10)):
            return "%.2f" % fvalue
        if (fvalue < 1):
            return "%.4e" % fvalue
    except():
        return "%s" % value

df.applymap(format_data)

print(df.to_latex())

输出显示格式化程序功能对数据帧没有影响:

\begin{tabular}{lrrrrrrrrr}
\toprule
{} &    A &         B &         C &         D &         E &         F &         G &         H &         I \\
\midrule
0  &   10 &  0.001890 &  0.001920 &  0.002140 &  0.002230 &  0.002380 &  0.002430 &  0.002330 &  0.002870 \\
1  &   10 &  1.840000 &  2.010000 &  2.030000 &  1.990000 &  2.110000 &  2.110000 &  2.090000 &  1.950000 \\
2  &   20 &  0.000528 &  0.000477 &  0.000523 &  0.000562 &  0.000550 &  0.000564 &  0.000546 &  0.000745 \\
3  &   20 &  1.450000 &  2.000000 &  1.890000 &  1.980000 &  2.080000 &  2.120000 &  2.070000 &  2.150000 \\
4  &   40 &  0.000193 &  0.000119 &  0.000141 &  0.000142 &  0.000130 &  0.000130 &  0.000130 &  0.000168 \\
5  &   40 &  1.170000 &  2.000000 &  1.610000 &  1.880000 &  2.010000 &  2.030000 &  2.010000 &  1.960000 \\
6  &   80 &  0.000086 &  0.000030 &  0.000046 &  0.000039 &  0.000032 &  0.000032 &  0.000032 &  0.000043 \\
7  &   80 &  1.060000 &  2.000000 &  1.320000 &  1.690000 &  2.010000 &  2.020000 &  2.010000 &  2.070000 \\
8  &  160 &  0.000041 &  0.000007 &  0.000018 &  0.000012 &  0.000008 &  0.000008 &  0.000008 &  0.000010 \\
9  &  160 &  1.020000 &       NaN &  1.140000 &  1.420000 &  2.000000 &  2.000000 &  2.010000 &  2.130000 \\
10 &  320 &  0.000020 &  0.000002 &  0.000008 &  0.000004 &  0.000002 &       NaN &  0.000002 &  0.000002 \\
\bottomrule
\end{tabular}

编辑:我使用的是Python 3.6.4和python-pandas 0.22.0-1。

0 个答案:

没有答案