繁体   English   中英

在 Pandas 中将 float64 列转换为 int64

[英]Convert float64 column to int64 in Pandas

我尝试使用以下方法将一列从数据类型float64转换为int64

df['column name'].astype(int64)

但出现错误:

NameError: 名称 'int64' 未定义

该列有人数,但格式为7500000.0 ,知道如何简单地将此float64更改为int64吗?

pandas 0.24+用于转换具有缺失值的数字的解决方案:

df = pd.DataFrame({'column name':[7500000.0,7500000.0, np.nan]})
print (df['column name'])
0    7500000.0
1    7500000.0
2          NaN
Name: column name, dtype: float64

df['column name'] = df['column name'].astype(np.int64)

ValueError:无法将非有限值(NA 或 inf)转换为整数

#http://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html
df['column name'] = df['column name'].astype('Int64')
print (df['column name'])
0    7500000
1    7500000
2        NaN
Name: column name, dtype: Int64

我认为你需要转换为numpy.int64

df['column name'].astype(np.int64)

样本:

df = pd.DataFrame({'column name':[7500000.0,7500000.0]})
print (df['column name'])
0    7500000.0
1    7500000.0
Name: column name, dtype: float64

df['column name'] = df['column name'].astype(np.int64)
#same as
#df['column name'] = df['column name'].astype(pd.np.int64)
print (df['column name'])
0    7500000
1    7500000
Name: column name, dtype: int64

如果列中的某些NaN需要通过fillna将它们替换为某些int (例如0 ),因为NaN typefloat

df = pd.DataFrame({'column name':[7500000.0,np.nan]})

df['column name'] = df['column name'].fillna(0).astype(np.int64)
print (df['column name'])
0    7500000
1          0
Name: column name, dtype: int64

还要检查文档 - 缺少数据转换规则

编辑:

使用NaN转换值是错误的:

df = pd.DataFrame({'column name':[7500000.0,np.nan]})

df['column name'] = df['column name'].values.astype(np.int64)
print (df['column name'])
0                7500000
1   -9223372036854775808
Name: column name, dtype: int64

您可能需要传入字符串'int64'

>>> import pandas as pd
>>> df = pd.DataFrame({'a': [1.0, 2.0]})  # some test dataframe

>>> df['a'].astype('int64')
0    1
1    2
Name: a, dtype: int64

有一些替代方法可以指定 64 位整数:

>>> df['a'].astype('i8')      # integer with 8 bytes (64 bit)
0    1
1    2
Name: a, dtype: int64

>>> import numpy as np
>>> df['a'].astype(np.int64)  # native numpy 64 bit integer
0    1
1    2
Name: a, dtype: int64

或者直接在你的列上使用np.int64 (但它返回一个numpy.array ):

>>> np.int64(df['a'])
array([1, 2], dtype=int64)

这在 Pandas 0.23.4 中似乎有点问题?

如果有 np.nan 值,那么这将按预期抛出错误:

df['col'] = df['col'].astype(np.int64)

但是,如果使用“忽略”,则不会像我期望的那样将任何值从 float 更改为 int:

df['col'] = df['col'].astype(np.int64,errors='ignore') 

如果我首先转换 np.nan,它会起作用:

df['col'] = df['col'].fillna(0).astype(np.int64)
df['col'] = df['col'].astype(np.int64)

现在我不知道如何让空值代替零,因为这会将所有内容再次转换回浮点数:

df['col']  = df['col'].replace(0,np.nan)

考虑使用

df['column name'].astype('Int64')

nan将更改为NaN

如果必须将 float64 转换为 int64,则必须使用 numpy,如下例所示:

import numpy as np
df['column name'].astype(np.int)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM