【问题标题】:Using formatters to make string from dataframe使用格式化程序从数据框制作字符串
【发布时间】:2017-12-01 07:11:13
【问题描述】:

我正在从数据框中写入一个字符串。我希望它尊重formatters,但我不希望字符串中有标题。我怎样才能得到这两个东西:没有标题,是格式?

import pandas
df = pandas.DataFrame({'c': 1, 'd': 2.3}, index=[0], )
formats = {'c': '{: 10d}', 'd': '{: 2.5f}'}
formatters = {k: v.format for k, v in formats.items()}
df.to_string(formatters=formatters, index=False, header=True)

u'c        d\n        1  2.30000'


df.to_string(formatters=formatters, index=False, header=False)

'1  2.30000'

我相信预期的结果是这样的?:

'         1  2.30000'

【问题讨论】:

  • 标题是什么意思?您不想同时打印1
  • 似乎只有前导的空字符被删除。如果填充例如0 它有效,并且正确的小数部分被保留。我也尝试了多行,只有第一行受到影响。

标签: python pandas


【解决方案1】:

[免责声明:我从未听说过DataFrame]

在我看来,这只是DataFrame 中的一个错误。尝试向开发人员报告错误。

作为一种解决方法,您似乎可以从字符串中删除第一行:

raw = df.to_string(formatters=formatters, index=False, header=True)
without_headers = '\n'.join(foo.splitlines()[1:])

【讨论】:

  • 呃,不是吗?我的代码删除了第一行,而不是第一个字符。
【解决方案2】:

您可以制作第二个 DataFrame 并正确格式化所有内容

df2 = pd.DataFrame()
for col_name, col in df.iteritems():
    df2[col_name] = col.apply(lambda x: formats[col_name].format(x))

然后将所有内容连接在一起

print(''.join(''.join(i[1:]) for i in df2.itertuples()))

'           1   2.30000'

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多