【问题标题】:Change data type of a specific column of a pandas dataframe更改熊猫数据框特定列的数据类型
【发布时间】:2017-01-11 12:23:13
【问题描述】:

我想按特定列对包含许多列的数据框进行排序,但首先我需要将类型从 object 更改为 int。如何在保持原有列位置不变的情况下更改该特定列的数据类型?

【问题讨论】:

  • 可以使用df['colname'] = df['colname'].astype(int) 吗?
  • 您是否尝试搜索此内容:stackoverflow.com/… 有很多相关问题。它还很大程度上取决于当前数据的构成,例如,如果您有缺失值,则无法转换为 int,因为 NaN 不能由 int 表示
  • 或者您只需要转换为int 进行排序,然后再转换回string (object)?
  • @jezrael 是的,请。我需要在排序后转换回来
  • @DougKruger - df['colname'] = df['colname'].astype(int) 工作或error ?

标签: python pandas


【解决方案1】:

df['colname'] = df['colname'].astype(int) 至少在从 float 值更改为 int 时有效。

【讨论】:

  • 这对我有用。我遇到了这个问题,我发现的所有答案似乎都过于复杂了,感谢简单的答案:)
【解决方案2】:

我尝试了以下方法:

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

它对我有用。

【讨论】:

    【解决方案3】:

    您可以通过sort_values 的排序列使用reindex,通过astype 转换为int

    df = pd.DataFrame({'A':[1,2,3],
                       'B':[4,5,6],
                       'colname':['7','3','9'],
                       'D':[1,3,5],
                       'E':[5,3,6],
                       'F':[7,4,3]})
    
    print (df)
       A  B  D  E  F colname
    0  1  4  1  5  7       7
    1  2  5  3  3  4       3
    2  3  6  5  6  3       9
    
    print (df.colname.astype(int).sort_values())
    1    3
    0    7
    2    9
    Name: colname, dtype: int32
    
    print (df.reindex(df.colname.astype(int).sort_values().index))
       A  B  D  E  F colname
    1  2  5  3  3  4       3
    0  1  4  1  5  7       7
    2  3  6  5  6  3       9
    
    print (df.reindex(df.colname.astype(int).sort_values().index).reset_index(drop=True))
       A  B  D  E  F colname
    0  2  5  3  3  4       3
    1  1  4  1  5  7       7
    2  3  6  5  6  3       9
    

    如果第一个解决方案由于None 或错误数据而不起作用,请使用to_numeric

    df = pd.DataFrame({'A':[1,2,3],
                       'B':[4,5,6],
                       'colname':['7','3','None'],
                       'D':[1,3,5],
                       'E':[5,3,6],
                       'F':[7,4,3]})
    
    print (df)
       A  B  D  E  F colname
    0  1  4  1  5  7       7
    1  2  5  3  3  4       3
    2  3  6  5  6  3    None
    
    print (pd.to_numeric(df.colname, errors='coerce').sort_values())
    1    3.0
    0    7.0
    2    NaN
    Name: colname, dtype: float64
    

    【讨论】:

      【解决方案4】:

      要简单地更改一列,您可以执行以下操作: df.column_name.apply(int)

      您可以将int 替换为您想要的所需数据类型,例如(np.int64)strcategory

      对于多种数据类型更改,我建议如下:

      df = pd.read_csv(data, dtype={'Col_A': str,'Col_B':int64})

      【讨论】:

        猜你喜欢
        • 2021-07-31
        • 2022-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        • 2020-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多