Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取列的总数_Python_Pandas_Dataframe_Sum - Fatal编程技术网

Python 获取列的总数

Python 获取列的总数,python,pandas,dataframe,sum,Python,Pandas,Dataframe,Sum,目标 我有一个熊猫数据框,如下所示,有多个列,我想得到列的总数,MyColumn 数据帧-df: 打印df 我的尝试: 我尝试使用groupby和.sum()获取列的总和: 这会导致以下错误: TypeError: 'instancemethod' object has no attribute '__getitem__' 预期产出 我希望输出结果如下所示: 319 或者,我希望使用名为TOTAL的新行编辑df,其中包含总计: X MyColu

目标

我有一个熊猫数据框,如下所示,有多个列,我想得到列的总数,
MyColumn


数据帧-
df

打印df


我的尝试

我尝试使用
groupby
.sum()
获取列的总和:

这会导致以下错误:

TypeError: 'instancemethod' object has no attribute '__getitem__'

预期产出

我希望输出结果如下所示:

319
或者,我希望使用名为
TOTAL
的新
编辑
df
,其中包含总计:

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   
TOTAL                  319
你应使用:

然后与
系列一起使用
,在这种情况下,索引应设置为与需要求和的特定列相同:

df.loc['Total'] = pd.Series(df['MyColumn'].sum(), index = ['MyColumn'])
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN
因为如果传递标量,所有行的值都将被填充:

df.loc['Total'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A        84   13.0   69.0
1        B        76   77.0  127.0
2        C        28   69.0   16.0
3        D        28   28.0   31.0
4        E        19   20.0   85.0
5        F        84  193.0   70.0
Total  319       319  319.0  319.0
另外两个解决方案与一起提供,请参见下面的应用程序:

df.at['Total', 'MyColumn'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN


注意:自Pandas v0.20以来,
ix
已被弃用。改用
loc
iloc

您可以在此处使用的另一个选项:

df.loc["Total", "MyColumn"] = df.MyColumn.sum()

#         X  MyColumn      Y       Z
#0        A     84.0    13.0    69.0
#1        B     76.0    77.0   127.0
#2        C     28.0    69.0    16.0
#3        D     28.0    28.0    31.0
#4        E     19.0    20.0    85.0
#5        F     84.0   193.0    70.0
#Total  NaN    319.0     NaN     NaN

您还可以使用
append()
方法:

df.append(pd.DataFrame(df.MyColumn.sum(), index = ["Total"], columns=["MyColumn"]))


更新:

如果需要为所有数值列追加总和,可以执行以下操作之一:

使用
append
以功能性方式执行此操作(不更改原始数据帧):

使用
loc
在适当位置改变数据帧:

df.loc['total'] = df.select_dtypes(pd.np.number).sum()
df
#         X  MyColumn      Y      Z
#0        A      84.0   13.0   69.0
#1        B      76.0   77.0  127.0
#2        C      28.0   69.0   16.0
#3        D      28.0   28.0   31.0
#4        E      19.0   20.0   85.0
#5        F      84.0  193.0   70.0
#total  NaN     638.0  800.0  796.0

与获取数据帧的长度类似,
len(df)
,以下内容适用于pandas和blaze:

Total = sum(df['MyColumn'])
或者

Total = sum(df.MyColumn)
print Total

作为另一种选择,您可以执行以下操作

Group   Valuation   amount
    0   BKB Tube    156
    1   BKB Tube    143
    2   BKB Tube    67
    3   BAC Tube    176
    4   BAC Tube    39
    5   JDK Tube    75
    6   JDK Tube    35
    7   JDK Tube    155
    8   ETH Tube    38
    9   ETH Tube    56
下面的脚本,您可以用于上面的数据

import pandas as pd    
data = pd.read_csv("daata1.csv")
bytreatment = data.groupby('Group')
bytreatment['amount'].sum()
有两种方法可以求一列的和

dataset=pd.read\u csv(“data.csv”)

1:总和(数据集.列名称)

2:数据集['Column_Name'].sum()


如果这方面有任何问题,请纠正我。

那太好了:)谢谢你的解释,我可以问一下
.loc
在上面的例子中做了什么吗?
loc
是用来做什么的。
at
也用于放大设置,请参见最后一次编辑。谢谢,有什么更好的方法吗?嗯,文档上说
the.loc/.ix/[]当为该轴设置不存在的键时,操作可以执行放大。
,因此
loc
ix
[]
。在next is writes中,如果缺少索引器,
at可以像上面一样放大对象。
因此所有方法都很好,但我认为
at
是最快的。要说明熊猫为什么不是蟒蛇,只需看看关于如何简单求和列的混淆。所有列的和如何?1.st exampe:
FutureWarning:pandas.np模块已弃用,将在未来版本中从pandas中删除。改为直接导入numpy
df.loc['total'] = df.select_dtypes(pd.np.number).sum()
df
#         X  MyColumn      Y      Z
#0        A      84.0   13.0   69.0
#1        B      76.0   77.0  127.0
#2        C      28.0   69.0   16.0
#3        D      28.0   28.0   31.0
#4        E      19.0   20.0   85.0
#5        F      84.0  193.0   70.0
#total  NaN     638.0  800.0  796.0
Total = sum(df['MyColumn'])
Total = sum(df.MyColumn)
print Total
Group   Valuation   amount
    0   BKB Tube    156
    1   BKB Tube    143
    2   BKB Tube    67
    3   BAC Tube    176
    4   BAC Tube    39
    5   JDK Tube    75
    6   JDK Tube    35
    7   JDK Tube    155
    8   ETH Tube    38
    9   ETH Tube    56
import pandas as pd    
data = pd.read_csv("daata1.csv")
bytreatment = data.groupby('Group')
bytreatment['amount'].sum()