将对象转换为整数 pandas

5

你好,我遇到了一个问题,需要将一个object类型的列转换为整型。

我有一个数据框,尝试将一些被检测为Object类型的列转换成整型(或浮点型),但是我已经找到的所有答案都不适用于我。

第一个状态

然后我尝试了to_numeric方法,但是不起作用。 to_numeric方法

之后尝试了一个自定义方法,你可以在这里找到:Pandas: convert dtype 'object' to int,但它也不起作用:data3['Title'].astype(str).astype(int) (我不能再传图片了-相信我,它不起作用)

我尝试使用inplace语句,但似乎不包含在这些���法中:

我很确定答案很简单,但找不到它


2
你需要自行分配,例如 data3['Title'] = pd.to_numeric(data3['Title']) 或者 data3['Title'] data3['Title'].astype(int)。实际上应该有一个标准问题来解决这个问题,因为这种变体出现了无数次。 - EdChum
6个回答

9
你需要将输出赋值回去:
#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

4

正如 python_enthusiast 所说,

这个命令对我也有效。

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

但也能很好地与

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

在替换逗号之前,您需要使用str来消除逗号,然后再将其改为int/float,否则会出现错误。


2

两年零十一个月后,我来了。

首先检查数据是否有任何空格、特殊字符(如逗号、点号或其他字符)。如果有,你需要将其删除,然后将字符串数据转换为浮点数,再转换为整数(这是我处理数字值但带有逗号的情况时所用的方法,例如 4,118,662)。

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

0

你也可以尝试这段代码,我用它很好用

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

0

我有一个像这样的数据集

dataset.info()

<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

使用编程语言移除了空值和NaN条目

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

注意条目减少了

但是视频观看次数是浮点数,如数据集.head()所示

然后我使用了

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

现在,

<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  int64 
 4   Comment ID        79868 non-null  object
 5   cleaned_comments  79868 non-null  object
dtypes: int64(1), object(5)
memory usage: 6.1+ MB

0

适用于Null的版本

在旧版的Pandas中,对于int类型没有NaN,但是新版本的Pandas提供了Int64,其中包含pd.NA

因此,要将具有缺失数据的object转换为int,可以执行以下操作。

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

通过先转换到浮点型,您可以避免对象无法转换为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的数据类型。目前这被认为是实验性的,但可能会有一个光明的未来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接