2017-08-01 19 views
3

我意識到我的標題的措辭並不是最好的,但我希望一個例子會清楚這起來了。將「字符串」和「數字串」的列表轉換爲「數字串」被轉換爲數字的列表

我將如何轉換像

example_list = ["asdf" , "4", "asdfasdf" , "8" , "9" ,"asdf"] 

清單,清單似

converted_list = ["asdf" , 4, "asdfasdf", 8 , 9 , "asdf"] 

所以基本上我怎麼做在那裏可以轉換爲整數的字符串轉換爲整數的列表,而無法轉換的字符串仍然是字符串?

請注意,如果converted_list中的每個項目都是整數或不是整數,我將如何在for循環中進行測試?

此問題的上下文是,我試圖在大熊貓中將頭轉換爲整數,因爲所有整數都是字符串。然後,如果該列的首字母爲數字,我會列出該列的平均值。現在,我已將所有標題都列入列表中。

回答

6

您可以使用帶三元的列表理解來確定列表中的每個元素是否爲數字。

>>> [int(n) if n.isdigit() else n for n in example_list] 
['asdf', 4, 'asdfasdf', 8, 9, 'asdf'] 
+1

我以前形成字典的笨拙方式。但是你可以在你的字典理解中使用你的洞察力,以便在'重新命名'調用中使用。 'df.rename(columns = {k:int(k)for k in df.columns if k.isdigit()})'。我很可能會開始使用這個( - : – piRSquared

+0

感謝有用的答案 是有一個原因 data_frame_names =名單(df.columns.values) #PRINT(data_frame_names) 數字化= [INT(N)如果n .isdigit()在數字化用於data_frame_names n]的 #PRINT(數字化) 別的n,用於X: 如果isinstance(X,INT): 打印(DF [df.columns [X]]意味着()。) else: pass 一直給出這個錯誤TypeError:必須是str,而不是int – Matthew

+0

您是否首先重命名了您的列?請參閱上面的@piRSquared的註釋請注意,您需要重新分配結果,例如'df = df.rename ...)'。 – Alexander

2

設置

example_list = ["asdf" , "4", "asdfasdf" , "8" , "9" ,"asdf"] 

df = pd.DataFrame(np.arange(24).reshape(4, 6), columns=example_list) 

df 

    asdf 4 asdfasdf 8 9 asdf 
0  0 1   2 3 4  5 
1  6 7   8 9 10 11 
2 12 13  14 15 16 17 
3 18 19  20 21 22 23 

轉換頭

df.rename(columns={k: int(k) for k in df.columns[df.columns.str.isdigit()]}) 

    asdf 4 asdfasdf 8 9 asdf 
0  0 1   2 3 4  5 
1  6 7   8 9 10 11 
2 12 13  14 15 16 17 
3 18 19  20 21 22 23 

注意
@亞歷山大在列表理解中使用字符串方法isdigit是非常有用的。我們可以通過與他的結合來改善這個問題。

df.rename(columns={k: int(k) for k in df.columns if k.isdigit()}) 

看類型

df.rename(
    columns={k: int(k) for k in df.columns[df.columns.str.isdigit()]} 
).columns.map(type) 

Index([<class 'str'>, <class 'int'>, <class 'str'>, <class 'int'>, 
     <class 'int'>, <class 'str'>], 
     dtype='object') 
+0

OP說 - '我想轉換頭在pandas' - 所以mybe名單是列名:) – jezrael

+1

THX @jezrael 。我已經更新了一些答案。 – piRSquared