我有以下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。