在 read_excel 上使用 pandas 更改数据类型

Changing data type with pandas on read_excel

我正在寻求帮助,因为我实际上对 pandas(和 python)还很陌生。 我遇到了一些数据的数据类型转换问题。

如您所见(并尝试),我试图告诉 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

非常感谢您的帮助。

您可以转换为带格式的字符串:

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

转换为 int 以舍去小数位并将 int 转换为具有 3 位数字的字符串。

编辑:为了详细说明,excel 将数字存储为浮点数,而不是像 csv 文件中那样的字符串。读取.csv文件时,可以指定列"dtype"s

还有一种可能。我必须承认它有点粗糙,但我测试成功了。

您需要创建一个新的 class:

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

,您将得到与 CSV.DictReader 相同的内容