本问题已经有最佳答案,请猛点这里访问。
一个菜鸟问题(修订):我读了一个.csv文件,并尝试按以下方式指定dtypes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14import 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文件后,我得到:
1
2
3
4
5
6
7
8
9
10df.dtypes
Phenotype object
State object
EventType object
EventYear object
AgeCategory object
NumberResistant object
PercentResistant object
dtype: object
我以为我会为每列获取字符串的dtypes。
我希望将每一列都读为字符串,因为有些列包含数字和字符串的混合,正如您将在.csv示例文件中看到的那样。读完文件后,我就可以开始操纵该死的东西了!
底线:我想清理数据行,并用NaN或零代替" None Tested"和" Not Defined"。无论如何,我无法通过"对象"做到这一点。
仅供参考,我已将.csv作为df读入,但没有'dtype'参数,但遇到了同样的问题。读取没有指定dtypes的文件后,我尝试从现有列创建一个新的整数列,但是'object'dtype似乎也妨碍了这种情况。
我被卡住了。我环顾四周,似乎无法自己弄清楚。
此处的示例输入.csv文件:(行之间没有多余的行,我只是试图使行更具可读性)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Phenotype,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个值
同样,字符串将作为对象存储,因为字符串没有固定的长度。
将类型保留在引号中,例如:dtype = { State: str, NumberTested : int, PercentResistant: float})
" ...字符串将作为对象存储,因为字符串没有固定的长度"这很有用,我会一直沿这些线看,但是我不喜欢尝试将对象转换为int。它似乎可以在线运行,但是一旦我退出该代码块,该值就会返回给对象!
我尝试用单引号将类型括起来,例如str建议,但没有运气。,谢谢!
我的确在列中有NaN,所以现在我试图将它们作为字符串读取并在代码中转换为int,float等。但是一旦执行df [somecolumn] = df [somecolumn] .astype(int)之类的操作,我就会遇到对象恢复为对象的问题
@ALollz我对您的评论进行了一些研究:" ...字符串将作为对象存储,因为字符串没有固定的长度。"我的理解是字符串是不可变的...它们是固定的(长度也是如此)并且不能更改。但是,可以对它们进行操作,即将它们复制并附加到其他字符串实例中,但是原始值不能更改。
@AZBlue我的意思是存储数据的基础字节的长度,这很重要,因为pandas是基于NumPy构建的。例如,每个int32占用相同数量的字节,无论您的数据帧的值是1还是1523。因此,即使字符串hello固定为5个字符,pandas也没有固定的字符串类型(这意味着所有条目都将据我所知,这就是为什么一切都成为对象的原因。
您还经常在具有NaN值的整数列中遇到此对象类型,因为numpy当前不支持NaN整数表示形式
我想在使用df.dtypes时看到返回的" str",好吧,.dtypes是一个numpy函数,除数字表示形式以外的任何内容都将作为"对象"返回。 因此,我的值确实是作为字符串读取的。 h 我在这里找到了答案:无法在python数据框中将列类型从对象转换为str
此链接对像我这样的新手也很有帮助:如何使用单个命令[Python-Pandas]获取所有列的数据类型?