2014-11-25 138 views
4

根据这个线索: SO: Column names to list大熊猫列名列出

它应该很容易做到的列名转换到一个列表。但是,如果我这样做:

df.columns.tolist() 

我得到:

[u'q_igg', u'q_hcp', u'c_igg', u'c_hcp'] 

我知道,我可以摆脱u和'的。但我想只是将清单名称列为清单,而没有任何黑客入侵。那可能吗 ?

+2

这是正确的,它只是表明该字符串是Unicode字符串。 – 2014-11-25 14:23:15

回答

8

或者,你可以尝试:

df2 = df.columns.get_values() 

,这将给你:

array(['q_igg', 'q_hcp', 'c_igg', 'c_hcp'], dtype=object) 

则:

df2.tolist() 

它给你:

['q_igg', 'q_hcp', 'c_igg'] 
1

列表[u'q_igg', u'q_hcp', u'c_igg', u'c_hcp']包含Unicode字符串:u表示它们是Unicode字符串,而'是围绕每个字符串。您现在可以在代码中以任何方式使用这些名称。有关Python 2.x中Unicode字符串的更多详细信息,请参见Unicode HOWTO

0

如果你在打印的名称没有引号或Unicode指标有兴趣,你可以做这样的事情:

In [19]: print "[" + ", ".join(df) + "]" 
[q_igg, q_hcp, c_igg, c_hcp] 
0

前面已经提到的U意味着它的Unicode转换。无论如何,最简洁的方法是将名称转换为ascii或类似的东西。

In [4]: cols 
Out[4]: [u'q_igg', u'q_hcp', u'c_igg', u'c_hcp'] 

In [5]: [i.encode('ascii', 'ignore') for i in cols] 
Out[5]: ['q_igg', 'q_hcp', 'c_igg', 'c_hcp' 

这里的问题是,你会失去在ascii中不编码的特殊字符。

一个更加肮脏的解决方案是获取列表对象的字符串表示形式,并将其替换为u。我不会使用,但它可能在BEFIT这种特殊情况下;-)您的需求

In [7]: repr(cols) 
Out[7]: "[u'q_igg', u'q_hcp', u'c_igg', u'c_hcp']" 
In [11]: x.replace("u", "") 
Out[11]: "['q_igg', 'q_hcp', 'c_igg', 'c_hcp']" 

见:https://docs.python.org/2/library/repr.html

+1

代表@AsheKetchum没有足够的代表评论:'.replace'的不利之处在于,如果您的原始变量名称中包含u,它可能会替换'** u **'。例如''u'q_ugg'“'会变成''''q_gg'”' – 2017-02-16 20:52:47