当前位置: 首页 > 知识库问答 >
问题:

将包含NaN的Pandas列转换为dtype'int'

潘智刚
2023-03-14

我从. csv文件读取数据到熊猫数据框如下。对于其中一个列,即id,我想将列类型指定为int。问题是id系列缺少/空值。

当我在读取.csv时尝试将id列强制转换为整数时,我得到:

df= pd.read_csv("data.csv", dtype={'id': int}) 
error: Integer column has NA values

或者,在阅读以下内容后,我尝试转换列类型,但这次我得到:

df= pd.read_csv("data.csv") 
df[['id']] = df[['id']].astype(int)
error: Cannot convert NA to integer

我如何处理这个问题?

共有3个答案

郑伟彦
2023-03-14

我的用例是在加载到DB表之前对数据进行扫描:

df[col] = df[col].fillna(-1)
df[col] = df[col].astype(int)
df[col] = df[col].astype(str)
df[col] = df[col].replace('-1', np.nan)

删除NAN,转换为int,转换为str,然后重新插入NAN。

这并不漂亮,但它完成了任务!

巫健柏
2023-03-14

在0.24版本中,熊猫获得了持有缺失值的整数dtype的能力。

可为空的整数数据类型。

熊猫可以使用数组来表示可能缺少值的整数数据。IntegerArray。这是在pandas中实现的扩展类型。它不是整数的默认数据类型,不会被推断;必须将数据类型显式传递到array()Series

arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())
pd.Series(arr)

0      1
1      2
2    NaN
dtype: Int64

要将列转换为可为空的整数,请使用:

df['myCol'] = df['myCol'].astype('Int64')
万英武
2023-03-14

整数列中缺乏NaN代表是熊猫“明白了”。

通常的解决方法是简单地使用浮动。

 类似资料:
  • 问题内容: 我有一个名为数据帧作为 我想将列转换为布尔值(当状态为“已交付”而状态为“未交付”时),但是如果状态既不是“未交付”也不是“未交付”,则应将其视为“类似”。 我想用一个字典 所以我可以轻松地添加其他字符串,可以将其视为或。 问题答案: 您可以使用:

  • 问题内容: 我在以字符串格式导入的pandas DataFrame中有一个字段。它应该是日期时间变量。如何将其转换为datetime列,然后根据日期进行过滤。 例: DataFrame Name: raw_data Column Name: Mycol Value Format in Column: ‘05SEP2014:00:00:00.000’ 问题答案: 使用该函数,指定一种格式以匹配您的数

  • 我有一个数据框,其中一列包含一个列表。 输出应如下所示: 我已经尝试了我在这里找到的这些选项,但不起作用。

  • 问题内容: 我有一个二维的numpy数组。此数组中的一些值为。我想使用此数组执行某些操作。例如考虑数组: 我试图每次取一行,以相反的顺序对其进行排序,以从行中获取最多3个值并取其平均值。我试过的代码是: 这不适用于包含的行。我的问题是,是否有一种快速的方法可以将2D numpy数组中的所有值都转换为零,以便我在排序和其他尝试做的事情上没有问题。 问题答案: 这应该工作: 在上述情况下,where_

  • 所以我的数据集有一些n个日期的位置信息。问题是每个日期实际上是不同的列标题。例如CSV看起来像 我想让它看起来像 我的问题是我不知道该列中有多少个日期(尽管我知道它们总是在name之后开始)

  • 问题内容: 我需要将列表转换为一列熊猫数据框 当前列表(len = 3): 所需的熊猫DF(形状= 3,): 请注意,这些数字代表上述“必需熊猫” DF中的索引。 问题答案: 采用: 谢谢DYZ: