当前位置: 首页 > 面试题库 >

pandas read_csv dtype前导零

东方栋
2023-03-14
问题内容

因此,我正在从NOAA读取站代码csv文件,如下所示:

"USAF","WBAN","STATION NAME","CTRY","FIPS","STATE","CALL","LAT","LON","ELEV(.1M)","BEGIN","END"
"006852","99999","SENT","SW","SZ","","","+46817","+010350","+14200","",""
"007005","99999","CWOS 07005","","","","","-99999","-999999","-99999","20120127","20120127"

前两列包含气象站代码,有时它们的前导零。当熊猫在未指定dtype的情况下导入它们时,它们将变成整数。没什么大不了的,因为我可以遍历数据帧索引并用类似的东西替换它们,”%06d” % i因为它们始终是六位数字,但是您知道…这是懒惰的方式。

使用以下html" target="_blank">代码获取csv:

file = urllib.urlopen(r"ftp://ftp.ncdc.noaa.gov/pub/data/inventories/ISH-HISTORY.CSV")
output = open('Station Codes.csv','wb')
output.write(file.read())
output.close()

一切都很好,但是当我尝试使用此方法阅读时:

import pandas as pd
df = pd.io.parsers.read_csv("Station Codes.csv",dtype={'USAF': np.str, 'WBAN': np.str})

要么

import pandas as pd
df = pd.io.parsers.read_csv("Station Codes.csv",dtype={'USAF': str, 'WBAN': str})

我收到一个讨厌的错误消息:

File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 401, in parser
_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 216, in _read
    return parser.read()
  File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 633, in read
    ret = self._engine.read(nrows)
  File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 957, in read
    data = self._reader.read(nrows)
  File "parser.pyx", line 654, in pandas._parser.TextReader.read (pandas\src\parser.c:5931)
  File "parser.pyx", line 676, in pandas._parser.TextReader._read_low_memory (pandas\src\parser.c:6148)
  File "parser.pyx", line 752, in pandas._parser.TextReader._read_rows (pandas\src\parser.c:6962)
  File "parser.pyx", line 837, in pandas._parser.TextReader._convert_column_data (pandas\src\parser.c:7898)
  File "parser.pyx", line 887, in pandas._parser.TextReader._convert_tokens (pandas\src\parser.c:8483)
  File "parser.pyx", line 953, in pandas._parser.TextReader._convert_with_dtype (pandas\src\parser.c:9535)
  File "parser.pyx", line 1283, in pandas._parser._to_fw_string (pandas\src\parser.c:14616)
TypeError: data type not understood

这是一个相当大的csv(3万1千行),所以也许与此有关吗?


问题答案:

这是pandas dtype猜测的问题。

pandas看到数字,然后猜测您希望它是数字。

为了使熊猫不怀疑您的意图,应设置所需的dtype: object

pd.read_csv('filename.csv', dtype={'leading_zero_column_name': object})

会成功的

更新,因为它可以帮助其他人:

要将所有列都设为str,可以执行此操作(根据评论):

pd.read_csv('sample.csv', dtype = str)

要将大多数或选择性的列设为str,可以执行以下操作:

# lst of column names which needs to be string
lst_str_cols = ['prefix', 'serial']
# use dictionary comprehension to make dict of dtypes
dict_dtypes = {x : 'str'  for x in lst_str_cols}
# use dict on dtypes
pd.read_csv('sample.csv', dtype=dict_dtypes)


 类似资料:
  • 问题内容: 我有发票号码表。准则说数字应该有6个或更多的数字。首先尝试做: 但这效率不高,甚至还很漂亮。我尝试了LPAD功能,但是后来出现了问题,因为功能: 返回受影响的零行。还用谷歌搜索,他们说将引号设为零将解决问题,但是没有帮助吗?这是日常导入。 编辑:列NUMER为INT(19)并已包含如下数据: (目前,它已填充了3到7位不同长度的数据) 问题答案: 我认为您应该考虑阅读的指南适用于发票的

  • 问题内容: Javascript的parseInt函数似乎无法完全正常工作。 问题答案: 这是因为如果数字以“ 0”开头,则将其视为以8为基数(八进制)。 您可以通过将base作为第二个参数来强制使用base。 根据docs,第二个参数是可选的,但并不总是假定为10,如您从示例中看到的那样。

  • 问题内容: 我想将Swift中的a 转换为前导零的a。例如,考虑以下代码: 当前的结果是: 但我希望它是: Swift标准库中是否有一种干净的方法可以做到这一点? 问题答案: 假设您希望字段长度为2,且前导零为零,则可以这样做: 输出: 这需要因此从技术上讲不是斯威夫特语言的一部分,而是由提供的功能框架。请注意这两个和包括因此没有必要再次导入它,如果你已导入或。 格式字符串可以指定多个项目的格式。

  • 问题内容: 我有下面的代码 和输出是 我期望输出如下。 当我打印直接int值时,为什么会给出?我期望Java自动将值从零开始转换为八进制。 和之间是什么关系? 问题答案: 前导0表示一个八进制数(以8为底)。 01111(八进制)是1 * 8 ^ 3 + 1 * 8 ^ 2 + 1 * 8 ^ 1 + 1 * 8 ^ 0 = 585(十进制) 将十进制数字1111转换为八进制字符串。八进制2127

  • 我如何设置MathJax"序言"在IPython(或Jupyter)笔记本中使用,以方便他人阅读我的文档(http://nbviewer.org),并适用于LaTeX/PDF生成的方式重复使用? 我想用IPython(现在的Jupyter)笔记本记录我后来通过LaTeX转换成PDF的文档(使用)。问题是如何包含我在几乎所有文档中使用的一系列宏定义。比如: 等等。就笔记本而言,一个不令人满意的解决方

  • 问题内容: 尝试这个: 因为什么时候40 = 32? 问题答案: 带有前导零的数字将解释为八进制和。