Усреднение данных из нескольких файлов данных в Python с помощью pandas

У меня есть 30 файлов данных csv из 30 повторных прогонов эксперимента, который я запускал. Я использую read_csv() pandas для чтения данных в список DataFrames. Я хотел бы создать единый DataFrame из этого списка, содержащий среднее значение 30 DataFrames для каждого столбца. Есть ли встроенный способ сделать это?

Чтобы уточнить, я расскажу о примере в ответах ниже. Скажем, у меня есть два DataFrames:

 >>> x ABC 0 -0.264438 -1.026059 -0.619500 1 0.927272 0.302904 -0.032399 2 -0.264273 -0.386314 -0.217601 3 -0.871858 -0.348382 1.100491 >>> y ABC 0 1.923135 0.135355 -0.285491 1 -0.208940 0.642432 -0.764902 2 1.477419 -1.659804 -0.431375 3 -1.191664 0.152576 0.935773 

Что такое функция слияния, которую я должен использовать для создания 3D-массива с помощью DataFrame? например,

 >>> automagic_merge(x, y) ABC 0 [-0.264438, 1.923135] [-1.026059, 0.135355] [-0.619500, -0.285491] 1 [ 0.927272, -0.208940] [ 0.302904, 0.642432] [-0.032399, -0.764902] 2 [-0.264273, 1.477419] [-0.386314, -1.659804] [-0.217601, -0.431375] 3 [-0.871858, -1.191664] [-0.348382, 0.152576] [ 1.100491, 0.935773] 

поэтому я могу рассчитать среднее значение, sem и т. д. в этих списках вместо всего столбца.

3 Solutions collect form web for “Усреднение данных из нескольких файлов данных в Python с помощью pandas”

Проверьте это:

 In [14]: glued = pd.concat([x, y], axis=1, keys=['x', 'y']) In [15]: glued Out[15]: xy ABCABC 0 -0.264438 -1.026059 -0.619500 1.923135 0.135355 -0.285491 1 0.927272 0.302904 -0.032399 -0.208940 0.642432 -0.764902 2 -0.264273 -0.386314 -0.217601 1.477419 -1.659804 -0.431375 3 -0.871858 -0.348382 1.100491 -1.191664 0.152576 0.935773 In [16]: glued.swaplevel(0, 1, axis=1).sortlevel(axis=1) Out[16]: ABC xyxyxy 0 -0.264438 1.923135 -1.026059 0.135355 -0.619500 -0.285491 1 0.927272 -0.208940 0.302904 0.642432 -0.032399 -0.764902 2 -0.264273 1.477419 -0.386314 -1.659804 -0.217601 -0.431375 3 -0.871858 -1.191664 -0.348382 0.152576 1.100491 0.935773 In [17]: glued = glued.swaplevel(0, 1, axis=1).sortlevel(axis=1) In [18]: glued Out[18]: ABC xyxyxy 0 -0.264438 1.923135 -1.026059 0.135355 -0.619500 -0.285491 1 0.927272 -0.208940 0.302904 0.642432 -0.032399 -0.764902 2 -0.264273 1.477419 -0.386314 -1.659804 -0.217601 -0.431375 3 -0.871858 -1.191664 -0.348382 0.152576 1.100491 0.935773 

Для записи замена уровня и переупорядочения не была необходима, только для визуальных целей.

Затем вы можете делать такие вещи, как:

 In [19]: glued.groupby(level=0, axis=1).mean() Out[19]: ABC 0 0.829349 -0.445352 -0.452496 1 0.359166 0.472668 -0.398650 2 0.606573 -1.023059 -0.324488 3 -1.031761 -0.097903 1.018132 

Я понял, как это сделать.

pandas DataFrames могут быть добавлены вместе с функцией DataFrame.add (): http://pandas.sourceforge.net/generated/pandas.DataFrame.add.html

Поэтому я могу добавить DataFrames вместе, а затем делить на число DataFrames, например:

 avgDataFrame = DataFrameList[0] for i in range(1, len(DataFrameList)): avgDataFrame = avgDataFrame.add(DataFrameList[i]) avgDataFrame = avgDataFrame / len(DataFrameList) 

Посмотрите на pandas.concat() . Когда вы читаете в своих файлах, вы можете использовать concat для объединения полученных DataFrames в один, а затем просто используйте обычные методы усреднения pandas, чтобы усреднить их.

Чтобы использовать его, просто передайте ему список DataFrames, который вы хотите объединить:

 >>> x ABC 0 -0.264438 -1.026059 -0.619500 1 0.927272 0.302904 -0.032399 2 -0.264273 -0.386314 -0.217601 3 -0.871858 -0.348382 1.100491 >>> y ABC 0 1.923135 0.135355 -0.285491 1 -0.208940 0.642432 -0.764902 2 1.477419 -1.659804 -0.431375 3 -1.191664 0.152576 0.935773 >>> pandas.concat([x, y]) ABC 0 -0.264438 -1.026059 -0.619500 1 0.927272 0.302904 -0.032399 2 -0.264273 -0.386314 -0.217601 3 -0.871858 -0.348382 1.100491 0 1.923135 0.135355 -0.285491 1 -0.208940 0.642432 -0.764902 2 1.477419 -1.659804 -0.431375 3 -1.191664 0.152576 0.935773 
Python - лучший язык программирования в мире.