2015-04-01 29 views
0

我正在尋找一些幫助,因爲我其實對熊貓(和python)來說其實是一個新手。 我正面對一些數據的數據類型轉換問題。在read_excel上用pandas更改數據類型

正如你可以看到(試),我想告訴大家,我希望它讀「DEP」數據列作爲字符串(因爲我希望保持數據不變)

>>> df = pd.read_excel("http://www2.impots.gouv.fr/documentation/statistiques/ircom2003/dep/060.xls", 0, skiprows=23, na_values="n.d.") 
>>> df.dtypes 
Unnamed: 0             float64 
DEP               float64 
Commune              float64 
... 

>>> df["DEP"] = df["DEP"].astype(str) 

>>> df.dtypes 
Unnamed: 0             float64 
DEP               object 
Commune              float64 
..... 

>>> df["DEP"][5] 
'60.0' 
大熊貓

您可以下載Excel文件,如果你想要的,但輸入的數據是這樣的:(我已經添加了列名之間的斜槓)

DEP/Commune /Libellé de la commune 
060 001 AIGLUN 
060 002 AMIRAT 

在這種情況下,我想簡單地保持數據作爲字符串的「060」和「001」。 我正在使用python 3.4和pandas 0.16

非常感謝您的幫助。

+0

此函數有一張票。請參閱https://github.com/pydata/pandas/issues/5891。 – 2015-04-01 18:50:35

回答

0

可以轉換爲字符串格式:

df["DEPS"]=df["DEPS"].map(lambda x:'{0:03d}'.format(int(x))) 

轉換成int下降小數位和int轉換成字符串3位。

編輯:只需詳細說明,excel將數字存儲爲浮點數,而不是csv文件中的字符串。讀取.csv文件時,可以指定「dtype」列

+1

值得注意的是'dtypes'選項不可用於'pd.read_excel()' – 2015-04-01 18:51:53

1

還有另一種可能性。我必須承認這有點scrapy,但我測試成功。

您需要創建一個新的類:

class NewType(): 
    def __init__(self, sValue=""): 
     self.strValue = sValue 

    def __str__(self): 
     return self.strValue 

再定義一個轉換函數:在函數

def convert(value): 
    return NewType(value) 

(要read_excel),做到以下幾點,假設你有28列閱讀:

import pandas as pd 
converters = dict() 
for i in range(0,28,1): 
    converters[i] = convert 
dataframe = pd.read_excel(path_to_file, sheet_name, 0, None, 0, None, 27, False, None, "", None, False, None, converters) 
dataframe = dataframe.transpose() 
dataDict = dataframe.to_dict() 
newDict= OrderedDict() 
for dataLine in dataDict.values(): 
    for field in dataLine.keys(): 
     dataLine[field] = str(dataLine[field]) 
    #do something with dataLine 

最後你有一些相同的東西CSV.DictReade r如果您的數據格式爲CSV