【发布时间】:2017-06-05 11:37:24
【问题描述】:
我正在寻找Series.str.zfill(width) 方法的定制版本。此方法在字符串中添加零,以使字符串具有width 字符。我正在寻找可以做到这一点的东西,但可以使用任何字符(或字符序列),而不仅仅是 0。例如,根据需要从左侧添加“-”多次,以便字符串具有 width 字符。
【问题讨论】:
标签: python python-3.x pandas string-formatting series
我正在寻找Series.str.zfill(width) 方法的定制版本。此方法在字符串中添加零,以使字符串具有width 字符。我正在寻找可以做到这一点的东西,但可以使用任何字符(或字符序列),而不仅仅是 0。例如,根据需要从左侧添加“-”多次,以便字符串具有 width 字符。
【问题讨论】:
标签: python python-3.x pandas string-formatting series
我认为您正在寻找以width 和fillchar 作为参数的Series.str.rjust:
在系列/索引中的字符串左侧填充额外的 字符。
【讨论】:
您可以在下面定义像left_fill 这样的自定义函数,并使用pandas.Series.apply 将其映射到整个系列。
import pandas as pd
s = pd.Series(['foo', 'bar', 'baz', 'apple'])
def left_fill(string, char, length):
while len(string) < length:
string = char + string
return string
s.apply(left_fill, args = ('-', 5))
但是,正如 cmets 中所述,您最好使用 pandas 内置的 rjust 方法而不是创建自己的方法!我的只是另一个性能较差的例子。
【讨论】:
apply 答案
apply 会更快,但现有方法应该可以更好地扩展,虽然列表解析有时更快,只是对于熊猫用户来说,他们真的应该只使用apply 如果有没有其他选择,这非常罕见。如果他们自动考虑使用apply 解决问题而不是寻找矢量化方法IMO,它也会使用户感到困惑,因为我已经看到很多这样的用户代码,请随意将其留在这里,但这只是我的对此的看法