python - pandas to_csv 参数 float_format 和 decimal 不适用于索引列

标签 python csv pandas indexing decimal-point

背景

我正在做一些模拟。通过改变参数进行系统分析(在这种情况下仅限 rpm)并将结果数据帧 results_df 的每一行附加到汇总数据帧 df 包含根据不同的 rpm 提供我的系统的 baviour。

为了获得用于绘图和数据分析的适当索引,我将列表中的各种值(此处为 rpm)转换为 pandas 系列 ser 并连接该系列汇总数据框 df 包含我感兴趣的结果。

由于我感兴趣的每个计算的结果只是每个计算的最后一行,我使用 .tail(1) 从结果数据帧 results_df 中提取此数据>.

我目前所做的如下代码片段所示:

rpm = [0.25, 0.3, 0.5, 0.75, 1.0, 1.5, 2.0]

ser = pd.Series(rpm, name='rpm')
df = pd.DataFrame()
df_list = list()

for i, val in enumerate(rpm):
    results_df = get_some_data_from_somwhere()
    df_list.append(results_df.tail(1))

df = df.append(df_list, ignore_index=True)
df = pd.concat([df, ser], axis=1)
df.set_index('rpm', inplace=True)


with open('foo.csv', 'w') as f:
    data.to_csv(f, index=True, header=True, decimal=',', sep=' ', float_format='%.3f')

问题

我得到的这个 csv 文件具有以下格式:

rpm cooling_inner heating_inner cooling_outlet heating_outlet
0.25 303,317 323,372 302,384 324,332

但是,我希望在我的索引列上有三个十进制数字和一个逗号作为十进制符号,如下所示:

rpm cooling_inner heating_inner cooling_outlet heating_outlet
0,250 303,317 323,372 302,384 324,332

因此,当使用 .to_csv命令。

由于 index 选项设置为 True 并且所有值(索引列除外)都具有正确的格式和小数点符号,我该如何实现此行为?

我必须以某种方式单独处理索引列吗?

最佳答案

我会重写你的两条底线:

with open('foo.csv', 'w') as f:
    data.to_csv(f, index=True, header=True, decimal=',', sep=' ', float_format='%.3f')

进入

data.reset_index().to_csv('foo.csv', index=False, header=True, decimal=',', sep=' ', float_format='%.3f')

这是一种解决方法,但正如您所注意到的,关键字参数 decimal=float_format= 仅适用于 data列,而不是索引。

我所做的是使用 reset_index 将索引放入数据框中,然后告诉 to_csv(index=False 不要将索引保存到文件中(因为它现在在数据中)。

另外,自己打开文件流(with open('foo.csv', 'w') as f:)最好留给 pandas,当你给出它是一个字符串 'foo.csv' 作为第一个参数。

关于python - pandas to_csv 参数 float_format 和 decimal 不适用于索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586162/

相关文章:

python - 检查 django 中每个请求的授权

javascript - Chrome 打包应用程序中的 GUI

python-3.x - Pandas 错误: Passing lists with missing labels

python - 如何在 Pandas 中添加排序功能?

python - 在 pandas df 中每 15 分钟 Groupby 值

python - 统计pandas中不同时间范围内的记录数

python - 如何定义多行的长十六进制文字?

python - 打印 subprocess.call 结果

r - 使用R跳过csv文件中的注释行

csv - 在 gnumeric 中查看以分号分隔的 .csv 文件