pandas dataframe列名:删除特殊字符

时间:2016-06-21 19:15:42

标签: python-3.x pandas special-characters

一些小丑为跟踪我们公司的工程问题制作了一个Lotus数据库/ applet。笑话是关键信息是用特殊字符命名的......数字符号(哈希标记,井号,\ u0023)。

缩写样本:

KA#         Issue Date      Current Position
27144       1/9/2014        Accounting
27194       12/20/2012      Engineering
32474       4/21/2008       Engineering
32623-HOLD  4/25/2016       Engineering
32745       11/13/2012      SEPE
32812       10/30/2013      Engineering
32817       12/7/2012       Purchasing
32839       1/8/2013        SEPE

我将此表(4K行,15列)输出到csv文件,并在python3中作为pandas数据帧进行处理。

我生成各种输出。如果我使用类似的东西:

df.iloc[:,[0,3,1,8,9,10]]

我获得了适当的输出,键列显示为"KA#"。 (当我说“关键列”时,我的意思是“最重要的”......不是“索引”。我保留了一个连续索引)

不幸的是,人们有时会在导出到csv之间弄乱Lotus中的列顺序,所以我不能保证"KA#"将是任何特定的列号。我想使用列名:

df.loc[:,["KA#","Issue Date","Current Position"]]

但是"KA#"列填充了NaN。

感谢您提供的任何帮助。

最后,如果我尝试将"KA#"重命名为"KA"

df['KA#'].name = 'KA'

抛出KeyError和

df = df.rename(columns={"KA#": "ka"})

完全被忽略了。该列显示为"KA#"

有人能想到摆脱或处理这个符号的方法吗?我现在甚至会选择正则表达式。

2 个答案:

答案 0 :(得分:9)

使用str.replace
df.columns=df.columns.str.replace('#','')

您可以在documentation

中查看此内容

答案 1 :(得分:0)

相反,我们可以使用lamda函数删除列中的特殊字符

df2 = df1.rename(columns = lambda x:x.strip('*'))