使用Pandas对csv中每列中的所有列求和

时间:2018-03-01 17:00:38

标签: python pandas dataframe

我编写的程序通常已经完成了我希望它做的事情 - 大部分时间。添加每列的总计。我的数据框使用csv文件格式。我的代码如下:

import pandas as pd
import matplotlib.pyplot


class ColumnCalculation:
"""This houses the functions for all the column manipulation calculations"""

def max_electricity(self):
    df.set_index('Date', inplace=True)
    df.loc['Total'] = df.sum()
    print(df)


df = pd.read_csv("2011-onwards-city-elec-consumption.csv")
ColumnCalculation.max_electricity(df)

我的数据集(我不知道如何正确格式化)

dataset

代码很好地将所有总计加到每列底部的总列中,除非它涉及到最后一列(2017)(下图):enter image description here

我不确定该程序的确如此,我尝试使用不同的格式选项,例如.iloc.ix,但它似乎没有什么区别。我还尝试单独添加每个列(下面):

def max_electricity(self):
    df.set_index('Date', inplace=True)
    df.loc['Total', '2011'] = df['2011'].sum()
    df.loc['Total', '2012'] = df['2012'].sum()
    df.loc['Total', '2013'] = df['2013'].sum()
    df.loc['Total', '2014'] = df['2014'].sum()
    df.loc['Total', '2015'] = df['2015'].sum()
    df.loc['Total', '2016'] = df['2016'].sum()
    df.loc['Total', '2017'] = df['2017'].sum()
    print(df)

但我收到一个错误,因为我认为这会太多了?我试图想出这个好时间和一点点。

1 个答案:

答案 0 :(得分:0)

您的最后一列未被解析为浮点数,而是字符串。

要解决此问题,请尝试在求和之前转换为数字:

import locale

locale.setlocale(locale.LC_NUMERIC, '')

df['2017'] = df['2017'].map(locale.atoi)

更好的是,尝试将数据作为数字数据读取。例如:

df = pd.read_csv('file.csv', sep='\t', thousands=',')