Вычисление средних средних значений.csv файлов в Python

106
8

У меня много файлов csv, и мне нужно рассчитать среднее значение конкретной конкретной ячейки. Ниже приведен упрощенный пример этих файлов csv. В моих фактических файлах имеется более одного поля значений, но для простоты я просто помещаю его для примера.

File0.csv:

Latitude, Longitude, Value 23, 97, 1 24, 97, 5 25, 97, 6 26, 97, 4

File1.csv:

Latitude, Longitude, Value 23, 97, 7 24, 97, 4 25, 97, 2 26, 97, 9

Каждый из файлов имеет одни и те же лат /lons и одинаковое количество строк/столбцов, мне просто нужно создать новый csv, который содержит средние значения на каждом lat/lon.

Пример желаемого вывода csv:

Latitude, Longitude, Value 23, 97, 4 24, 97, 4.5 25, 97, 4 26, 97, 6.5

Еще одно замечание: у меня есть некоторые значения NoData в моих файлах csv (с учетом значения -999.9), что может вызвать некоторые проблемы усреднения.

спросил(а) 2021-01-28T01:43:29+03:00 2 месяца, 2 недели назад
1
Решение
118

Если вы знакомы с библиотеками PySpark или Pandas, вы можете использовать их read_csv и groupby. В противном случае другой вариант - использовать open() чтобы открыть файл и прочитать его с помощью Python IO, и вручную добавить в 2-мерный список, отслеживая количество элементов в каждом списке. Например,

values = []
for line in file:
values.append([line.split(','), 1])

counter = 0

for file2 in files:
for line in file2:
if counter > values.length:
values.append([line.split(','), values[counter][1] + 1])
else:
values[counter] = [map(lambda x, y: x + y, values[counter][0], line.split(',')), values[counter][1] + 1]

values[i] = [[j / values[i][1] for j in values[i][0]] for i in range(len(values))]


Общая предпосылка довольно проста; код просто несколько грязный. Если вы собираетесь манипулировать данными таким образом очень часто, я предлагаю вам использовать PySpark или Pandas. Что-то, что может занять 20 строк кода в чистом Python, потребует всего 2-3 строки кода в этих библиотеках.

ответил(а) 2021-01-28T01:43:29+03:00 2 месяца, 2 недели назад
43

Чтобы прочитать файл CSV:

def read_CSV_to_matrix(filename):
matrix = []
with open(str(filename)) as f:
for line in f:
matrix.append(int(line.strip().split(",")))
return matrix

Затем вы перебираете оба ваши матрицы:

for index, line in matrix1:
# for each line in F0.csv, print element 1, 2 and the average
# of element 3 in the both matrices
print(line[0], line[1], (line[2]+matrix2[index][2])/2)

Отказ от ответственности: я noob (всего 2 года xp с Python 3)

ответил(а) 2021-01-28T01:43:29+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема