gpt4 book ai didi

python - 如何强制 pandas.io.parsers 设置特定于列的类型

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:00 24 4
gpt4 key购买 nike

今天我正在努力应对一个有趣的警告:

parsers.py:1139: DtypeWarning: Columns (1,4) have mixed types. Specify dtype option on import or set low_memory=False.

让我们从头开始,我有几个文件,每个文件都有数千行,每个文件的内容如下所示:

##ID    ChrA    StartA  EndA    ChrB    StartB  EndB    CnvType Orientation GeneA   StrandA LastExonA   TotalExonsA PhaseA  GeneB   StrandB LastExonB   TotalExonsB PhaseB  InFrame InPhase
nsv871164 1 8373207 8373207 1 8436802 8436802 DELETION HT ? ? ? ? ? RERE - 14 24 0 Not in Frame
dgv1n68 1 16765770 16765770 1 16936692 16936692 DELETION HT ? ? ? ? ? NBPF1 - 2 29 -1 Not in Frame
nsv9213 1 16777016 16777016 1 16779533 16779533 DELETION HT NECAP2 + 6 8 0 NECAP2 + 6 8 1 In Frame Not in Phase
.....
nsv510572 Y 16898737 16898737 Y 16904738 16904738 DELETION HT NLGN4Y + 4 6 1 NLGN4Y + 3 6 1 In Frame In Phase
nsv10042 Y 59192042 59192042 Y 59196197 59196197 DELETION HT ? ? ? ? ? ? ? ? ? ? ?

列[1]和列[4]指的是“人类染色体”,应该是1到22,然后是X和Y。

有些文件很短(2k 行),有些文件很长(200k 行)。

如果我用一个短文件创建 pandas.Dataframe,那么没问题,解析器可以正确地将 columns[1] 和 [4] 中的项目识别为“字符串”。

但是如果文件足够长,解析器会分配“int”直到某个点,然后在遇到“X”或“Y”时分配“string”。

此时我收到了警告。

我认为发生这种情况是因为解析器在内存中加载有限数量的行,然后考虑列的所有值检查要分配的最佳类型,然后继续解析文件的其余部分。

现在,如果可以一次解析所有行,那么就没有错误,解析器一次识别所有值 [1,2,3,4...,'X','Y'] 并且分配最佳类型(在本例中为“str”)。如果行数太大,则文件将被分成几部分进行解析,在我的例子中,第一部分仅包含 [1,2,3,4] 并且解析器分配“int”。

这当然弄乱了我的管道..

如何强制解析器仅将类型“str”分配给列[1]和[4]?

这是我用来从我的文件中制作数据框的代码:

dataset = pandas.io.parsers.read_table(my_file, sep='\t', index_col=0)

最佳答案

您可以将列的数据类型设置为 read_csv 的参数因此,如果您知道列,则只需传递一个以列名作为键、dtype 作为值的字典,例如:

dataset = pandas.io.parsers.read_table(my_file, sep='\t', index_col=0, dtype={'ChrA':'str'})

只需不断向字典中添加其他列名称即可。

关于python - 如何强制 pandas.io.parsers 设置特定于列的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com