【发布时间】: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 整数表示