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

2024-04-16 16:13:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻求一些帮助,因为我实际上对熊猫(和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文件,但是输入数据如下:(我在列名之间添加了斜杠)

^{pr2}$

在本例中,我只想将数据“060”和“001”保留为字符串。 我使用的是python3.4和pandas 0.16

非常感谢你的帮助。在


Tags: 数据字符串httppandasdfreadexcelpd
2条回答

还有另一种可能。我得承认有点难看,但我测试成功了。在

您需要创建一个新类:

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

   def __str__(self):
        return self.strValue

然后定义一个转换函数:

^{pr2}$

在您的函数(要读取_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.DictReader如果你把数据格式化成CSV格式

可以使用以下格式转换为字符串:

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

convert to int以删除小数点,并将int转换为带3位数字的字符串。在

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

相关问题 更多 >