import pandas as pd
import numpy as np
import string
df = pd.DataFrame(np.arange(12).reshape(3,4), index = list('abc'), columns = list('wxyz'))
df
w x y z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
我知道我可以通过map方法来更改索引。
df.index.map(str.upper)
想知道我是否可以通过这种方式更改索引。
df.index.map(string.ascii_lowercase)
但是,当我运行代码时,出现以下错误
TypeError: 'str' object is not callable
有人可以解释语法上的差异和错误的原因。
答案 0 :(得分:0)
在语法上没有区别。您用作pandas.Index.map
的参数的对象类型有所不同。该文档明确了允许的内容:
索引。地图(映射器)
将映射器功能应用于索引。映射器:可调用
要应用的功能。
通常,比起测试对象是否是一个函数,最好是测试一个对象是否可调用。原理请参见What is duck typing?。
在这种情况下,str.upper
是可调用的,而string.ascii_lowercase
是字符串。要确认这一点,您可以使用callable
(Python 3.2 +):
callable(str.upper) # True
callable(string.ascii_lowercase) # False
答案 1 :(得分:0)
不推荐使用string
软件包。
import string
string.__doc__
"A collection of string operations (most are no longer used).
\n\nWarning: most of the code you see here isn't normally used nowadays [...]
内置str
允许您执行大多数操作。如零字符串所述,ascii_lowercase只为您提供小写字母。
如果要实现的目的是将DataFrame索引设置为小写,则应该执行df.index.map(str.lower)
。
import pandas as pd
import numpy as np
import string
df = pd.DataFrame(np.arange(12).reshape(3,4), index = list('ABC'), columns = list('wxyz'))
df.index.map(str.lower)
w x y z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11