使用dtypes读取CSV文件,但是在某些列中存在缺失值。

8 浏览
0 Comments

使用dtypes读取CSV文件,但是在某些列中存在缺失值。

我使用以下代码读取csv文件,并为每一列指定了类型:\n

clean_pdf_type=pd.read_csv('table_updated.csv',usecols=col_names,dtype =col_types)

\n但是出现了错误:\n

ValueError: 整数列在第298列存在NA值

\n不确定如何跳过NA值?

0
0 Comments

问题的原因是在读取CSV文件时,使用了指定的数据类型(col_types),但在列中存在NA值。解决方法是在读取CSV文件之后,先将NA值替换为0,然后再将数据类型转换为指定的类型(col_types)。

具体的代码如下:

clean_pdf_type = pd.read_csv('table_updated.csv', usecols=col_names)
clean_pdf_type = clean_pdf_type.fillna(0).astype(col_types)

在这里需要注意的是,这个方法会将整个数据框的数据类型都进行更改,而不仅仅是指定的列。因此,如果在col_types中定义了多种类型,可能会产生错误。

如果没有更多的信息,将NA值替换为0是最简单和最快的方法来找到特定的错误。但是,如果有其他错误需要注意,可以将数据框分割成多个部分,以确保不会将所有数据都以相同的方式转换。

另一种更简单和更快的方法是,了解数据并根据需要将col_types相应地更改为float而不是int。这种解决方案基本上是说“让我们寻找错误并返回进行一些更改”。

正如之前所说的,这种解决方法的含义就是寻找错误,进行更改,并从中吸取教训。你不能用更完美的方式来表达它了!

0
0 Comments

在Pandas v0.24版本之前,无法在int类型的Series中存在NaN值,因为NaN值被认为是float类型。因此,最好的方法是将这些列读取为float类型。然后,如果能将NaN值替换为诸如0或-1之类的填充值,可以相应地进行处理并转换为int类型。

解决方法如下:

import numpy as np
import pandas as pd
int_cols = ['col1', 'col2', 'col3']
df[int_cols] = df[int_cols].fillna(-1)
df[int_cols] = df[int_cols].apply(pd.to_numeric, downcast='integer')

如果同时存在int和float值的混合情况,将导致Series的dtype为object类型,这是不推荐的。

0