【问题标题】:Add prefix failed with percentage添加前缀失败,百分比
【发布时间】:2017-08-02 06:53:24
【问题描述】:
df = pd.DataFrame({'a':[1,4], 'b':[7,8]})
print (df)
   a  b
0  1  7
1  4  8

我尝试在列名中添加%,所以使用DataFrame.add_prefix

print (df.add_prefix('%'))

TypeError:字符串格式化期间并非所有参数都转换

可能有什么问题?

add_prefix 函数如何与% 一起使用?

还是只是bug?

通知

可能的解决方案如下:

df.columns = ['%' + col for col in df.columns]
print (df)
   %a  %b
0   1   7
1   4   8

但我对函数 add_prefix 感兴趣。

【问题讨论】:

  • 可能是一个错误? mapperf = (str(prefix) + '%s').__mod__ 位于/python2.7/site-packages/pandas/core/internals.py 的第2593 行(pandas 0.17.1)。

标签: python pandas multiple-columns prefix


【解决方案1】:

注意:
这可能会在不久的将来发生变化,因为pandas 在这种情况下将使用新的字符串格式。发生这种情况时:

'{}hello'.format('%')

'%hello'

添加带有单个 % 的前缀就可以了。

See github


回答
两个百分号!使用旧样式的字符串格式时,一个转义另一个。

df.add_prefix('%%')

   %a  %b
0   1   7
1   4   8

线索来自:

   2856     def add_prefix(self, prefix):
   2857         f = (str(prefix) + '%s').__mod__
-> 2858         return self.rename_axis(f, axis=0)
   2859 
   2860     def add_suffix(self, suffix):

所以我自己试了一下

f = ('my_prefix_' + '%s').__mod__
f('hello')

'my_prefix_hello'

然后

f = ('%' + '%s').__mod__
f('hello')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-901-0c92e5498bbc> in <module>()
      1 f = ('%' + '%s').__mod__
----> 2 f('hello')

TypeError: not all arguments converted during string formatting

所以我查找了如何在旧的字符串格式中转义'%',发现this answer

导致了这个

f = ('%%' + '%s').__mod__
f('hello')

'%hello'

【讨论】:

  • 我尝试了同样的事情。事实上,出于挫败感,我有一次尝试使用r'\\\\\\\\\\\\\\\\%'
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多