【问题标题】:Python: Changing int64 to float64 by indexing multiple columnsPython:通过索引多列将 int64 更改为 float64
【发布时间】:2020-10-02 08:32:21
【问题描述】:

虽然我发现了很多关于按名称更改单个列或几列的数据类型的事情,但我很难找到有关更改许多列而不输入所有特定名称的任何事情。

我想将所有 int64 更改为 float64,而无需手动指定所有 60 列。我发现了这个:

df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

但是创建一个列表,例如:column_list = list(df[6:]) 似乎甚至没有给出从第 7 列开始的列表。

【问题讨论】:

    标签: python-3.x pandas list dataframe


    【解决方案1】:

    使用DataFrame.iloc,第一个:表示选择所有行,第二个是第7列的所有列:

    df = pd.DataFrame({
            'A':list('abcdef'),
             'B':[4,5,4,5,5,4],
             'C':[7,8,9,4,2,3],
             'D':[1,3,5,7,1,0],
             'E':['a',5,4,5,5,4],
             'F':[7,'a',9,4,2,3],
             'G':[1,3,5,7,1,0],
             'H':[4,5,'a',5,5,4],
             'I':[7,8,9,4,2,3],
             'J':[1,3,5,'a',1,0],
             'K':[5,'a',6,9,2,4]
    })
    
    print (df.dtypes)
    A    object
    B     int64
    C     int64
    D     int64
    E    object
    F    object
    G     int64
    H    object
    I     int64
    J    object
    K    object
    dtype: object
    

    df.iloc[:, 6:] = df.iloc[:, 6:].apply(pd.to_numeric, errors='coerce', downcast='float')
    
    print (df.dtypes)
    dtype: object
    A     object
    B      int64
    C      int64
    D      int64
    E     object
    F     object
    G    float64
    H    float64
    I    float64
    J    float64
    K    float64
    dtype: object
    

    如果所有值都是整数:

    df.iloc[:, 6:] = df.iloc[:, 6:].astype(np.float64)
    

    【讨论】:

    • 谢谢,有帮助。我还发现,我输入的不是 errors='coerce':downcast='float' 并且我要求的所有行都转换为 float 32。
    • @BrianDroncheff - 好主意,超级棒!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2021-11-13
    相关资源
    最近更新 更多