【问题标题】:Remove the automatic two spaces between columns that Pandas DataFrame.to_string inserts删除 Pandas DataFrame.to_string 插入的列之间的自动两个空格
【发布时间】:2018-08-26 22:17:47
【问题描述】:

我正在寻找一种解决方案来删除/关闭 df.to_string 自动创建的列之间的 2 个空格。

例子:

from pandas import DataFrame

df = DataFrame()
df = df.append({'a':'12345', 'b': '12345'})
df.to_string(index=False, header=False)
'12345  1235'

为清楚起见,结果是:“12345..12345”,其中的点代表实际空间。

我已经尝试过 pandas.set_optionpandas.to_string 文档。

编辑:上面的例子过于简化了。我正在使用一个现有的 df,它到处都有空格,并且输出文本文件被另一个基于每行字符宽度的黑盒程序使用。我已经想出了如何用格式化程序重新格式化列,并确保我的列没有被 pandas 默认截断,所以我在那里有 90%(减去这些自动空格)。 仅供参考,这里有一些关于to_string() 格式和数据截断的好链接:

感谢您的帮助!

【问题讨论】:

  • 好吧,愚蠢但简单的解决方案是用一个空格替换所有出现的两个或多个空格...在简要查看代码后,我没有看到明显的方法
  • 你不能把它们关掉,而且它们不是普通的2个空格。它们是因为对齐而创建的(如果您插入更多具有不同长度的行,这将更加明显)。为什么你仍然需要这样做?如果您需要列的连接,那么您应该在打印之前这样做。
  • 感谢@Noah 和 Qusai 的反馈。为了清楚起见,这个例子被过度简化了。我有一个很大的df,我正在使用它是所有不同长度的列,到处都有大量随机空间。该项目的一项新任务是写出供另一个程序使用的文本文件。我无法触摸其他程序,并且它具有特定宽度的字符,可以为每一列“读取”。因为我已经有一个 df 并且看到有一个 to_string 选项,所以我想我会试一试,但我遇到了这个问题
  • @PydPiper 您可以尝试手动使用re.sub 进行转换。

标签: python pandas dataframe formatting display


【解决方案1】:

您可以使用pd.Series.str.cat 方法,该方法接受sep 关键字参数。默认情况下,sep 设置为 '',因此值之间没有分隔。以下是文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.cat.html

您还可以使用pd.Series.str.strip 从每个值中删除任何前导或尾随空格。以下是文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.strip.html

这是一个基于你所拥有的示例:

df = pd.DataFrame({'a': ['12345'], 'b': ['12345']})
df.iloc[0].fillna('').str.strip().str.cat(sep=' ')

请注意,如果有任何空值,则需要 fillna('')

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。 to_string() 中有一个 justify 选项,它应该在这种情况下有所帮助。但我最终还是用了旧方法:

    [row['a']+ row['b'] for index, row in df.iterrows()]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多