熊猫-DataFrame.to_string删除列之间的自动间距

时间:2018-08-26 22:17:47

标签: python pandas

问题:正在寻找一种解决方案,以删除df.to_string自动创建的列之间的2个空格。进一步来说;我认为必须进行某种设置才能关闭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_option文档 -pandas.to_string文档

最终挑战: 该示例过于简化。我正在与一个现有的df一起使用,该df到处都有空格,并且输出文本文件被另一个黑盒程序占用,该程序基于每行的字符宽度。我已经想出了如何使用格式化程序重新格式化列,并确保我的列没有被pandas默认值切除,所以我在那里90%(减去这些自动空格)。 与to_string格式和数据截断有关的良好链接:

Convert to date using formatters parameter in pandas to_string

https://github.com/pandas-dev/pandas/issues/9784

感谢帮助!

2 个答案:

答案 0 :(得分: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('')

答案 1 :(得分:0)

我也有同样的问题。 to_string()中有一个证明选项,在这种情况下应该会有所帮助。但是我最终还是按照旧的方式做:

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