我得 ValueError:无法将float NaN转换为整数以便跟随:
df = pandas.read_csv('zoom11.csv')
df[['x']] = df[['x']].astype(int)
更新:使用评论/答案中的提示我将数据清理干净:
# x contained NaN
df = df[~df['x'].isnull()]
# Y contained some other garbage, so null check was not enough
df = df[df['y'].str.isnumeric()]
# final conversion now worked
df[['x']] = df[['x']].astype(int)
df[['y']] = df[['y']].astype(int)
答案 0 :(得分:11)
要识别NaN
值,请使用boolean indexing
:
print(df[df['x'].isnull()])
然后,要移除所有非数字值,请使用带有errors='coerce'
NaN
的{{3}} - 它将非数字替换为df['x'] = pd.to_numeric(df['x'], errors='coerce')
s:
NaN
要删除x
列中df = df.dropna(subset=['x'])
的所有行,请使用to_numeric
:
int
上次将值转换为df['x'] = df['x'].astype(int)
s:
appSettings
答案 1 :(得分:4)
此外,即使在最新版本的pandas上,如果列是 object 类型,您也必须首先将其转换为float,例如:
df['column_name'].astype("Float32").astype("Int32")
float和int的大小(如果是32或64)取决于您的变量,请注意,如果数字对于格式来说太大,则可能会降低精度。
答案 2 :(得分:2)
我知道已经回答了这个问题,但希望将来为任何人提供替代解决方案:
您可以使用.loc
仅按notnull()
的值对数据框进行子集设置,然后仅对'x'
列进行子集设置。取相同的向量,然后apply(int)
。
如果x列是浮动的:
df.loc[df['x'].notnull(), 'x'] = df.loc[df['x'].notnull(), 'x'].apply(int)
答案 3 :(得分:0)
ValueError:无法将float NaN转换为整数
实际上,您可以从v0.24开始。熊猫引入了Nullable Integer Data Types,它允许整数与NaN共存。
给出一系列缺少数据的整个浮点数,
s = pd.Series([1.0, 2.0, np.nan, 4.0])
s
0 1.0
1 2.0
2 NaN
3 4.0
dtype: float64
s.dtype
# dtype('float64')
您可以使用以下方式将其转换为可为null的int类型(从Int16
,Int32
或Int64
中选择),
s2 = s.astype('Int32') # note the 'I' is uppercase
s2
0 1
1 2
2 NaN
3 4
dtype: Int32
s2.dtype
# Int32Dtype()
您的列需要有整数才能进行转换。其他任何事情都会引发TypeError:
s = pd.Series([1.1, 2.0, np.nan, 4.0])
s.astype('Int32')
# TypeError: cannot safely cast non-equivalent float64 to int32
答案 4 :(得分:0)
如果您具有空值,那么在进行数学运算时,如果您希望数据集不可更改,则会使用df[~df['x'].isnull()]df[['x']].astype(int)
来解决此错误。