2014-11-25 245 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