最近在實作某個作業的時候遇到這樣的問題,我用read_csv()
將資料讀進來了,但是因為讀進來後都會變成str的型態,我想要把他們自動轉成正確的資料型態,例如,有一筆list如下:
["hello","100","3.14"] |
我想要把它轉換成:["hello",100,3.14]
並且它的type分別是str int float
可是我要如何知道list內的元素到底是哪種型態,並且轉換它呢?
上網查了之後發現有兩個方式:
- 使用
eval()
這個function,它的功用原本是將作為參數的字串當作指令執行,不過也可以透過它達成自動轉換型態。
使用方式如下:
1 | x = '7' |
詳細使用方式可以參考這篇:
http://www.runoob.com/python/python-func-eval.html
2.ast.liter_eval(),這個也可以達到上面的結果,和eval()
的差別在於“eval()
如果無法進行轉換會出現例外訊息,而ast.liter_eval()
會先檢查,如果無法進行轉換則不會轉換”,使用前須import ast
最終我採用了第二種方式,並且寫成function的形式:1
2
3
4
5
6
7
8
9import ast
def type_converter(string_list): #change str to correct type
coverted_list = []
for i in string_list:
try:
coverted_list.append(ast.literal_eval(i))
except:
coverted_list.append(i) #some still with str type (ex:date、chinese)
return coverted_list