Результат среднего двух фреймов данных - PullRequest
1 голос
/ 08 мая 2020

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

В моем случае два фрейма данных (ЗНАКИ СТУДЕНТОВ). Я должен вычислить среднее из двух и вернуть результат. Это хорошо работает, когда я удаляю столбцы с именами и другими данными о студентах, и вылетает, когда они добавляются.

Это часть того, что у меня есть.

elif self.exam_combo.currentText()=="2":
        df2 = QFileDialog.getOpenFileName(MainWindow, 'Upload marks', os.getenv('HOME'), 'CSV(*.csv)')
        path = df2[0]
        df3 = pd.read_csv(path)
        QMessageBox.information(MainWindow,"Successfull","Choose the last set of marks to upload.")
        df4 = QFileDialog.getOpenFileName(MainWindow, 'Upload marks', os.getenv('HOME'), 'CSV(*.csv)')
        path = df4[0]
        df5 = pd.read_csv(path)

        dfs = [df3, df5]
        df = pd.DataFrame(np.array([x.to_numpy() for x in dfs]).mean(axis=0), index=df3.index, columns=df3.columns)

Это дает ошибку.

Traceback (most recent call last):
  File "D:\Python\PyQt5\Proper_1.py", line 1557, in upload_marks
df = pd.DataFrame(np.array([x.to_numpy() for x in dfs]).mean(axis=0), index=df3.index, columns=df3.columns)
  File "C:\Users\Links Net\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\core\_methods.py", line 153, in _mean
    ret = um.true_divide(
TypeError: unsupported operand type(s) for /: 'str' and 'int'

Я думаю, что это происходит из-за смешивания строк и целых чисел для усреднения системы. Кто-нибудь, чтобы помочь. Еще пробовал

df_concat.groupby(level=0).mean()

и { ссылка }

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Используйте:

dfs = [df3, df5]
#select only numeric columns
dfs = [x.select_dtypes(np.number) for x in dfs]
#join together with mean per index
df = pd.concat(dfs).mean(axis=0)
0 голосов
/ 09 мая 2020

У меня работает с

dfs=pd.concat([df3,df5]).groupby(["STREAM", "ADM", "NAME", "KCPE" ]). mean() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...