2012-05-14 79 views
26

我剛開始使用熊貓,我正在使用read_csv()方法在csv文件中閱讀。我遇到的困難是阻止大熊貓將我的電話號碼轉換爲大數字,而不是將它們保持爲字符串。我定義了一個轉換器,它只保留了數字,但他們仍然轉換爲數字。當我改變我的轉換器以在電話號碼前添加'z'時,他們保留了字符串。有沒有辦法讓他們保持字符串不修改字段的值?在熊貓csv閱讀器中指定數據類型

+2

請向我們顯示您的代碼 –

+3

@Gardner:你有沒有考慮接受答案? –

回答

13

看起來你不能避免熊貓試圖轉換CSV文件中的數值/布爾值。查看IO解析器的熊貓源代碼,特別是函數_convert_to_ndarrays_convert_typeshttps://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

你總是可以指定你想要後您已經閱讀文件類型:

df.phone = df.phone.astype(str) 
+1

謝謝@lbolla,這有助於我的一個錯誤修正,其中一個浮點值被讀爲字符串,因爲另一個字段是字符串,後來在聚集函數中導致問題。我必須做df ['col'] = df ['col']。astype(float64) –

28

由於熊貓0.11.0可以使用D型參數爲每列顯式指定數據類型:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

請注意,這是不可用的(但希望)對於其他一些輸入函數,如'pandas.read_fwf()' – ReneSac

+2

I重新訪問該主題,並支持'dtype'已經被添加到'pandas.read_fwf' :) – zero323

+0

這種方法不適用於大數據集有沒有其他方式來讀取csv和只有特定的列。 –