如何去除DataFrame列名空格?解决NameError报错问题
问题描述
我尝试去除DataFrame列名中的空格,示例代码如下:
my_df=pd.DataFrame({' name_1':[1, 2],' name_2':[3, 4],})
经过调研后,我尝试了以下代码:
my_df.columns.map(lstrip()) df.columns.to_series().map(lstrip)
但均报错:
NameError: name 'lstrip' is not defined
然而字符串的mystr.lstrip()可以正常运行。请问如何避免该错误?错误原因是什么?
错误原因
lstrip()是字符串实例的方法,只能通过具体的字符串对象调用(比如' abc'.lstrip()),它并不是一个可以直接调用的独立全局函数。直接写lstrip或lstrip()会被Python识别为未定义的名称,触发NameError。map()方法需要传入一个可调用对象(比如函数、lambda表达式),你传入的lstrip()是试图调用不存在的函数,lstrip则是引用不存在的名称,自然会报错。
解决方法
以下几种方式都可以实现去除列名前导空格的需求:
方法1:用str.lstrip作为可调用对象传递给map
str.lstrip是字符串类的方法,可以直接作为函数作用于每个列名字符串:
my_df.columns = my_df.columns.map(str.lstrip)
方法2:通过lambda表达式调用lstrip
用lambda表达式对每个列名字符串单独调用lstrip():
my_df.columns = my_df.columns.map(lambda x: x.lstrip())
方法3:使用rename方法批量修改
如果需要更直观的列名修改逻辑,也可以用rename方法:
my_df = my_df.rename(columns=lambda x: x.lstrip())
扩展:去除列名所有前后空格
如果需要同时清理列名的前导和尾随空格,把lstrip换成strip即可:
my_df.columns = my_df.columns.map(str.strip)
内容的提问来源于stack exchange,提问作者Abijah
相关产品推荐
相关产品推荐

