将对象转换为Int pandas

时间:2017-04-28 10:24:21

标签: python-3.x pandas

您好我有一个问题是将对象列转换为完整列的整数。

我有一个数据框,我试图将一些被检测为Object的列转换为Integer(或Float),但我找到的所有答案都适合我:(

First status

然后我尝试应用to_numeric方法但不起作用。 To numeric method

然后您可以在此处找到自定义方法:Pandas: convert dtype 'object' to int 但是也不起作用:data3['Title'].astype(str).astype(int) (对不起,我再也无法传递图像了 - 你必须相信我它不起作用)

我尝试使用inplace语句,但似乎没有集成在这些方法中:

我很确定答案是愚蠢但找不到它:( 有人能帮助我吗?

由于

6 个答案:

答案 0 :(得分:5)

您需要分配输出:

#maybe also works omit astype(str)
data3['Title'] = data3['Title'].astype(str).astype(int)

或者:

data3['Title'] = pd.to_numeric(data3['Title'])

样品:

data3 = pd.DataFrame({'Title':['15','12','10']})
print (data3)
  Title
0    15
1    12
2    10

print (data3.dtypes)
Title    object
dtype: object
data3['Title'] = pd.to_numeric(data3['Title'])
print (data3.dtypes)
Title    int64
dtype: object
data3['Title'] = data3['Title'].astype(int)

print (data3.dtypes)
Title    int32
dtype: object

答案 1 :(得分:3)

如python_enthusiast所说,

此命令也对我有用

data3.Title = data3.Title.str.replace(',', '').astype(float).astype(int)

但也可以与

一起使用
data3.Title = data3.Title.str.replace(',', '').astype(int)

您必须在替换之前使用str才能摆脱逗号,然后将其更改为int / float,否则会出错。

答案 2 :(得分:0)

您也可以尝试使用此代码,与我一起正常工作

data3.Title= pd.factorize(data3.Title)[0]

答案 3 :(得分:0)

2年11个月后,但我走了。

重要的是要首先检查您的数据是否有空格,特殊字符(例如逗号,点或其他任何东西)。如果是,那么您基本上需要删除那些字符串,然后将字符串数据转换为float,然后转换为整数(对于我的数据为数值但带有逗号(例如4,118,662)的情况,这对我来说是有效的)。

data3.Title = data3.Title.str.replace(',', '').astype(flaoat).astype(int)

答案 4 :(得分:0)

我有一个像这样的数据集

dt1 <- structure(list(group = c(1L, 1L, 1L), type = c("cat", "dog", "bird"), count = c(5L, 3L, 6L)), class = "data.frame", row.names = c(NA, -3L)) dt2 <- structure(list(group = c(2L, 2L, 2L), type = c("cat", "dog", "rat"), count = c(2L, 2L, 3L)), class = "data.frame", row.names = c(NA, -3L)) dt3 <- structure(list(group = c(3L, 3L, 3L), type = c("fish", "dog", "rat"), count = c(1L, 2L, 2L)), class = "data.frame", row.names = c(NA, -3L))

dataset.info()

使用删除了None,NaN条目

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 79902 entries, 0 to 79901
Data columns (total 6 columns):
 #   Column            Non-Null Count  Dtype 
---  ------            --------------  ----- 
 0   Query             79902 non-null  object
 1   Video Title       79902 non-null  object
 2   Video ID          79902 non-null  object
 3   Video Views       79902 non-null  object
 4   Comment ID        79902 non-null  object
 5   cleaned_comments  79902 non-null  object
dtypes: object(6)
memory usage: 5.5+ MB
dataset = dataset.replace(to_replace='None', value=np.nan).dropna()

注意减少的条目

<class 'pandas.core.frame.DataFrame'> Int64Index: 79868 entries, 0 to 79901 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Query 79868 non-null object 1 Video Title 79868 non-null object 2 Video ID 79868 non-null object 3 Video Views 79868 non-null object 4 Comment ID 79868 non-null object 5 cleaned_comments 79868 non-null object dtypes: object(6) memory usage: 6.1+ MB 是浮点数,如Video Views

然后我用

dataset.head()

现在

dataset['Video Views'] = pd.to_numeric(dataset['Video Views'])
dataset['Video Views'] = dataset['Video Views'].astype(int)

问题已解决

答案 5 :(得分:0)

适用于 Null 的版本

在旧版 Pandas 中,NaN 没有 int,但新版 Pandas 提供了 Int64,其中包含 pd.NA

因此,要从 objectint 且缺少数据,您可以这样做。

df['col'] = df['col'].astype(float)
df['col'] = df['col'].astype('Int64')

首先切换到浮动可以避免 object cannot be converted to an IntegerDtype 错误。

请注意 Int64 中的大写“I”。

此处有更多信息https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html

使用 pd.NA

在 Pandas 1.0 中引入了新的 pd.NA 数据类型; pd.NA 的目标是提供一个“缺失”指示符,可以跨数据类型一致使用(而不是 np.nan、None 或 pd.NaT,具体取决于数据类型)。

考虑到这一点,他们创建了 dataframe.convert_dtypes()Series.convert_dtypes() 函数,它们可以转换为支持 pd.NA 的数据类型。这目前被认为是实验性的,但很可能是一个光明的未来。