Python - CSV - Рассчитать среднее значение столбца по идентификатору столбца - PullRequest
0 голосов
/ 05 июня 2018

У меня есть очень большой CSV-файл, который мне удалось упорядочить по идентификатору столбца, но я не могу рассчитать средние значения столбца с этим идентификатором столбца.

88741,42.84286022,16.41829224,1
88797,42.78081536,16.40743455,1
88797,42.78081536,16.21153455,1
88823,42.51512511,16.43304948,2
88885,42.88204193,16.12412548,2
87227,42.88204193,16.64223948,3
and so on...

Мне нужно получить новый CSV-файлбез столбца SchoolCode и с усреднением по широте и долготе для каждого кластера.А также, номер цифры должен быть одинаковым.Я пробовал панд, это выдает мне эту ошибку.

Вывод должен быть примерно таким:

Lat,Long,Cluster
<average_lat_forCluster1>,<average_long_forCluster1>,1
<average_lat_forCluster2>,<average_long_forCluster2>,2
<average_lat_forCluster3>,<average_long_forCluster3>,3
and so on...

Мой код:

import pandas as pd

df = pd.read_csv('SortedCluster.csv', names=[
             'SchoolCode', 'Lat', 'Long', 'Cluster'])
df2 = df.groupby('Cluster')['Lat','Long'].mean()
df2.to_csv('AverageOutput.csv')

Ошибка:

    Traceback (most recent call last):
  File "averager.py", line 6, in <module>
    df2 = df.groupby('Cluster')['Lat','Long'].mean()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/groupby/groupby.py", line 1306, in mean
    return self._cython_agg_general('mean', **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/groupby/groupby.py", line 3974, in _cython_agg_general
    how, alt=alt, numeric_only=numeric_only, min_count=min_count)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/groupby/groupby.py", line 4046, in _cython_agg_blocks
    raise DataError('No numeric types to aggregate')
pandas.core.base.DataError: No numeric types to aggregate

1 Ответ

0 голосов
/ 05 июня 2018

Я считаю, что сначала нужно преобразовать значения в числовые, если необходимо:

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

, а затем агрегировать mean по группам:

df.groupby('Cluster')['Lat','Long'].mean()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...