Как суммировать определенные столбцы в панде и затем отобразить итоги на гистограмме - PullRequest
0 голосов
/ 03 июля 2019

Мой фрейм данных состоит из 59 столбцов с +2000 строк данных (данных, собираемых в секунду). Мне нужно суммировать / сложить все данные в отдельных столбцах с 29 по 60, чтобы получить 31 общее количество бинов. Затем мне нужно построить итоги 31 бина в гистограмме с номером бина в качестве оси x и числом отсчетов на оси y.

Примечание: я работаю в функции внутри класса, вызванного из другого места.

Я суммировал / добавил каждый указанный столбец с помощью функции sum (). Затем вызывается функция гистограммы, и она доходит до создания пустой фигуры, а затем выдает длинный список ошибок, который завершается ошибкой datetime (я не уверен, как datetime участвует в этом ...). Пожалуйста, кто-нибудь может указать мне правильное направление и помочь заставить мою гистограмму работать?

В примерах показан предыдущий код и только первые 5 бинов.

import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt

class Pops(object):
    def __init__(self, popsfile): #, pops_hdr_lines):
        '''
...

        '''
        #________________________________________________
        #         # READ IN FILES AND CONCATENATE FILES 

        if not isinstance(popsfile, list):
            self.POPSfile = [popsfile]
        else:
            self.POPSfile = popsfile

        # read in multiple POPS datafiles into a list
        dfs = []
        for file in self.POPSfile:
            df = pd.read_csv(file, sep=',', header=0) # PANDAS!
            dfs.append(df)

        # concatenate all dataframes together
            data = pd.concat(dfs)

        # ------------------------------------------------------------
        # create new time stamp
        # determine date
        date_string = self.POPSfile[0][-16:-8]  # extracts YYYYMMDD.
        popsdate = dt.datetime.strptime(date_string, '%Y%m%d')

        # Convert from date and time in sam since 1/1/1970
        data.DateTime = pd.to_datetime(data.DateTime, errors='coerce', unit='s')

        # Rename columns to remove whitespaces
        data = data.rename(columns={' Status': 'Status', ' PartCt': 'PartCt', ' PartCon': 'PartCon',' BL': 'BL',
                                    ' P': 'P', ' POPS_Flow': 'POPS_Flow', ' LDTemp': 'LDTemp', ' Temp': 'Temp',
                                    ' Laser_Current': 'Laser_Current'})

        self.data = data

    def plot_housekeeping(self, path, show_save):
        '''plot some of the basic data

        '''

        # histogram attempt

        bins = self.data[['b0', 'b1', 'b2', 'b3', 'b4']].sum() # sums the bins of interest
        print(bins) # check output
        plt.hist(bins)
        plt.show()


        return None

if __name__ == '__main__':
    main()

Вот что я получаю:

b0    12965454
b1     9168956
b2     4178861
b3     2878718
b4     2699768
dtype: int64
Traceback (most recent call last):
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/backends/backend_qt5.py", line 519, in _draw_idle
    self.draw()
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 437, in draw
    self.figure.draw(self.renderer)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/figure.py", line 1493, in draw
    renderer, self, artists, self.suppressComposite)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2635, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/axis.py", line 1190, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/axis.py", line 1028, in _update_ticks
    tick_tups = list(self.iter_ticks())  # iter_ticks calls the locator
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/axis.py", line 971, in iter_ticks
    majorLocs = self.major.locator()
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/dates.py", line 1249, in __call__
    self.refresh()
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/dates.py", line 1269, in refresh
    dmin, dmax = self.viewlim_to_dt()
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/dates.py", line 1027, in viewlim_to_dt
    return num2date(vmin, self.tz), num2date(vmax, self.tz)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/dates.py", line 522, in num2date
    return _from_ordinalf(x, tz)
  File "/opt/scitools/environments/default/current/lib/python3.6/site-packages/matplotlib/dates.py", line 322, in _from_ordinalf
    dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC)
ValueError: year 37173 is out of range
...