我正在寻找一些帮助,因为我实际上对pandas(和python)很新。 我正面临着一些数据的数据类型转换问题。
正如你所看到的(并尝试),我试图告诉大熊猫我希望它以字符串形式读取“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 :(得分: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
格式化数据,最后您将获得与CSV.DictReader相同的内容答案 1 :(得分:0)
您可以使用格式转换为字符串:
df["DEPS"]=df["DEPS"].map(lambda x:'{0:03d}'.format(int(x)))
转换为int以删除小数位并将int转换为3位数的字符串。
编辑:只是详细说明,excel将数字存储为浮点数,而不是像csv文件中那样存储字符串。阅读.csv文件时,您可以指定列" dtype" s