首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas: ValueError: Integer列在第2列中有NA值

Pandas: ValueError: Integer列在第2列中有NA值
EN

Stack Overflow用户
提问于 2020-02-24 22:02:09
回答 1查看 7.1K关注 0票数 1

在尝试将csv文件读入到我的数据类型时,我得到了值错误。我需要确保它工作正常,并且每一行都被读入并且是正确的。

例如,错误包括:

代码语言:javascript
复制
Pandas: ValueError: Integer column has NA values in column 2

我试图在Pandas Python库中强制转换为整数,但有一个值。

然而,我读入的csv文件似乎有一些错误的条目,因为它由手动输入的测试结果组成。

我读到了这个命令:

代码语言:javascript
复制
test = pd.read_csv("test.csv", sep=";", names=pandasframe_names, dtype=pandasframe_datatypes, skiprows=1)

名称是A、B、C、D和E,并且定义正确。

如果有错误的条目,我需要一种在不丢失整行的情况下进行处理的方法。

下面是我的例子:我有一个pandas数据帧,它读入一个csv表,该表有5列,标题分别是A、B、C、D、E。我用参数skiprows=1跳过了第一行

代码语言:javascript
复制
pandas_datatypes={'A': pd.np.int64, 'B':pd.np.int64, 'C':pd.np.float64, 'D':object, 'E':object}

我的行有5列,前2列是int64,第3列是float64,后2列是对象(例如string)

这些等同于我读入时的dtype。意思是dtype=pandas_datatypes

现在我有如下条目:

代码语言:javascript
复制
entry 1: 5; 5; 2.2; pedagogy; teacher (correct)
entry 2: 8; 7.0; 2.2; pedagogy; teacher (incorrect, as second is float instead of int)
entry 3: NA; 5; 2.2; pedagogy; teacher (incorrect, as first value has entered NA as is missing)
entry 4: none; 5; 2.2; pedagogy; teacher (incorrect, as first value has entered none as is missing)
entry 5: 8; 5; 2; pedagogy; teacher (incorrect, as third is int instead of float)

我如何最好地处理这一点,我必须添加什么才能确保它正常工作?如果有一个错误的条目,我不想丢失整行。我应该输入NULL吗?但我需要标记它,以便有人手动查看它。

EN

回答 1

Stack Overflow用户

发布于 2020-02-24 22:35:24

由于您有不完整/损坏的数据(非常常见!),您不能从一开始就强制使用数据类型。您必须首先按原样导入它:

给定file1.csv

代码语言:javascript
复制
5; 5; 2.2; pedagogy; teacher
8; 7.0; 2.2; pedagogy; teacher
NA; 5; 2.2; pedagogy; teacher
none; 5; 2.2; pedagogy; teacher
8; 5; 2; pedagogy; teacher

我们可以把它理解为

代码语言:javascript
复制
df = pd.read_csv('file1.csv', sep=';', header=None, names=['A', 'B', 'C', 'D', 'E'])

然后,我们将A、B和C强制转换为数字,在有文本的地方强制使用NaN

代码语言:javascript
复制
for col in ['A', 'B', 'C']:
    df[col] = pd.to_numeric(df[col], errors='coerce')

然后你就有了C作为一个浮动的列。将A和B转换为into有点棘手,因为它们有NaN值(a known Pandas issue)。

如果您的版本为0.24或更高,则可以执行以下操作:

代码语言:javascript
复制
df['A'] = df['A'].astype(pd.Int64Dtype())
df['B'] = df['B'].astype(pd.Int64Dtype())

否则,您可以以某种方式填充NaN,或者接受浮点数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60377531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档