【问题标题】:Converting object to Int pandas将对象转换为 Int pandas
【发布时间】:2017-09-26 10:31:06
【问题描述】:

您好,我在将对象列转换为完整列的整数时遇到问题。

我有一个数据框,我尝试将一些被检测为对象的列转换为整数(或浮点数),但我已经找到的所有答案都对我有用

First status

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

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

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

我很确定答案是愚蠢的,但找不到它

【问题讨论】:

  • 您需要自行分配,例如data3['Title'] = pd.to_numeric(data3['Title'])data3['Title'] data3['Title'].astype(int) 确实应该有一个规范的问题,因为这个变体出现了无数次

标签: python python-3.x pandas


【解决方案1】:

我有一个这样的数据集

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

使用

删除了 None、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

注意减少的条目

Video Views 是浮点数,如dataset.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

【讨论】:

    【解决方案2】:

    适用于 Null 的版本

    对于旧版本的 Pandas,int 没有 NaN,但新版本的 pandas 提供 Int64,其中有 pd.NA

    所以要从 object 转到 int 并丢失数据,您可以这样做。

    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 的数据类型。这目前被认为是实验性的,但很可能是一个光明的未来。

    【讨论】:

      【解决方案3】:

      正如python_发烧友所说,

      这个命令也适用于我

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

      但也适用于

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          你也可以试试这个代码,和我一起工作

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

          【讨论】:

            【解决方案6】:

            你需要重新分配输出:

            #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
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-07-25
              • 2014-12-02
              • 2017-07-21
              • 1970-01-01
              • 2011-04-09
              • 2021-11-02
              • 1970-01-01
              • 2015-09-15
              相关资源
              最近更新 更多