Python Pandas:在保留数据类型的同时,添加计算特定(多个)列之和的总行的最佳方法

Python Pandas:在保留数据类型的同时,添加计算特定(多个)列之和的总行的最佳方法,python,pandas,dataframe,Python,Pandas,Dataframe,我试图在数据框的底部创建一行,以显示某些列的总和。我的印象是,这将是一个非常简单的操作,但令我惊讶的是,我发现的所有方法都不是一步到位的 我在SO上找到的方法: df.loc['TOTAL']=df.sum() 只要dataframe中有非数字列,这对我就不起作用。我需要先选择列,然后在非数字列后面加上concat df.append(df.sum(仅数值=True),忽略索引=True) 这不会保留我的数据类型。整数列将转换为浮点 df3.loc['Total','ColumnA']=df['

我试图在数据框的底部创建一行,以显示某些列的总和。我的印象是,这将是一个非常简单的操作,但令我惊讶的是,我发现的所有方法都不是一步到位的

我在SO上找到的方法:

  • df.loc['TOTAL']=df.sum()
  • 只要dataframe中有非数字列,这对我就不起作用。我需要先选择列,然后在非数字列后面加上concat

  • df.append(df.sum(仅数值=True),忽略索引=True)
  • 这不会保留我的数据类型。整数列将转换为浮点

  • df3.loc['Total','ColumnA']=df['ColumnA'].sum()
  • 我只能用它来求一列的和

    我一定错过了一些东西,因为这不是一个很难的手术。请让我知道如何在保留数据帧的数据类型的同时添加求和行

    谢谢

    编辑:

    首先,很抱歉更新太晚。上周末我在路上

    例如:

    df1 = pd.DataFrame(data = {'CountyID': [77, 95], 'Acronym': ['LC', 'NC'], 'Developable': [44490, 56261], 'Protected': [40355, 35943], 
                              'Developed': [66806, 72211]}, index = ['Lehigh', 'Northampton'])
    

    我想要的是

    请忽略索引的差异

    这对我来说有点棘手,因为我不需要获取列“County ID”的总和,因为它是用于特定索引的。因此,问题更多的是获取特定数值列的总和


    再次感谢。

    要选择数字列,您可以执行以下操作

    df_numeric = df.select_dtypes(include = ['int64', 'float64'])
    df_num_cols = df_numeric.columns
    
    然后做你首先做的(使用我发现的)


    以下是一些玩具数据作为示例:

    df = pd.DataFrame({'A':[1.0,2.0,3.0],'B':[1,2,3],'C':['A','B','C']})
    
    为了在求和后保留
    d类型
    ,我们将它们存储为
    d

    d = df.dtypes
    
    接下来,因为我们只想对数值列求和,所以将
    numeric\u only=True
    传递给
    sum()
    ,但遵循与第一次尝试类似的逻辑

    df.loc['Total'] = df.sum(numeric_only=True)
    
    最后,将数据帧的
    dtypes
    重置为其原始值

    df.astype(d)
    


    请提供一个5-10行的示例数据框,并明确指出您的输出。“你的问题(以及当前的答案)充其量是模棱两可的。”coldspeed,我刚刚问过。请让我知道它是否有效。或者,您可以通过执行
    df\u not\u numeric=df选择非数字类型的列来选择数字列。选择数据类型(包括=['object','datetime'])
    然后执行
    df\u num\u colls=df.columns.difference(df\u num.columns)
    谢谢。这太棒了。这几乎正是我想要的,除了有时我不需要某些数字列之和的部分(如我在编辑中所示)。那我该怎么办?
    df.astype(d)
    
             A  B    C
    0      1.0  1    A
    1      2.0  2    B
    2      3.0  3    C
    Total  6.0  6  NaN