【问题标题】:I can't seem to specify column dtypes when reading in a .csv file [duplicate]读取 .csv 文件时,我似乎无法指定列 dtypes [重复]
【发布时间】:2018-09-18 07:12:17
【问题描述】:

一个菜鸟问题(已修改):我读入了一个 .csv 文件,并尝试按以下方式指定 dtypes:

import csv
import pandas as pd

cdc = pd.read_csv('myFile.csv', 
dtype = {
'Phenotype': str,
'State': str,
'EventType': str,
'EventYear': str,
'AgeCategory': str,
'NumberTested' : str,
'NumberResistant': str,        
'PercentResistant': str
 })

但是在阅读了df文件后,我得到了:

df.dtypes

Phenotype           object
State               object
EventType           object
EventYear           object
AgeCategory         object
NumberResistant     object
PercentResistant    object
dtype: object

我想我会为每一列获取字符串的 dtypes。

我希望将每一列都作为字符串读取,因为有些列混合了数字和字符串,正如您将在下面的 .csv 示例文件中看到的那样。读入文件后,我就可以开始操作该死的东西了!

底线:我想清理数据行并将“未测试”和“未定义”替换为 NaN 或零。无论如何,我无法用“对象”来做到这一点。

仅供参考,我已将 .csv 作为没有“dtype”参数的 df 读入,但我遇到了同样的问题。在读取未指定 dtype 的文件后,我尝试从现有列创建一个新的整数列,但“object”dtype 似乎也妨碍了这一点。

我被困住了。我环顾四周,我自己似乎无法弄清楚这一点。

此处输入 .csv 文件示例:(行之间没有多余的行,我只是试图使行更具可读性)

Phenotype,State,EventType,EventYear,AgeCategory,NumberTested,NumberResistant,PercentResistant

Acinetobacter,AK,All HAIs,2011, 1-18,2,1,0.5

Acinetobacter,AK,CAUTI,2011, 1-18,0,None Tested,Not Defined

Acinetobacter,AK,CLABSI,2011, 1-18,0,None Tested,Not Defined

Acinetobacter,AK,SSI,2011, 1-18,0,None Tested,Not Defined

Acinetobacter,AK,All HAIs,2011,<1,2,2,1.0

Acinetobacter,AK,CAUTI,2011,<1,0,None Tested,Not Defined

Acinetobacter,AK,CLABSI,2011,<1,0,None Tested,Not Defined

Acinetobacter,AK,SSI,2011,<1,0,None Tested,Not Defined

Acinetobacter,AK,All HAIs,2011,19-64,(1-19),Insufficient Data,Insufficient Data

【问题讨论】:

  • 显示您的 .csv。
  • 你在这些列中有 NaN
  • 此外,字符串将作为对象存储,因为字符串没有固定长度。
  • @AZBlue 我的意思是存储数据的底层字节的长度,这很重要,因为 pandas 是基于 NumPy 构建的。例如,每个 int32 占用相同数量的字节,无论您的数据帧的值是 1 还是 1523。所以即使字符串 'hello' 固定为 5 个字符,pandas 也没有固定的字符串类型(这意味着所有条目都将是相同数量的字符)据我所知,这就是为什么一切都成为一个对象。
  • 您还会在具有 NaN 值的整数列中经常遇到这种对象类型,因为 numpy 目前不支持 NaN 整数表示

标签: python pandas csv


【解决方案1】:

我想看到使用 df.dtypes 时返回的“str”,嗯,.dtypes 是一个 numpy 函数,除数字表示之外的任何东西都将作为“object”返回。因此,我的值确实被作为字符串读入。多哈。我在这里找到了答案:can not convert column type from object to str in python dataframe

这个链接对像我这样的新手也很有帮助:How to get datatypes of all columns using a single command [ Python - Pandas ]?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2018-04-27
    • 2016-10-07
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多