Преобразование строк в столбцы с помощью pandas

#python #python-3.x #pandas #dataframe

#python #python-3.x #pandas #фрейм данных

Вопрос:

Я учусь создавать систему рекомендаций для совместной работы пользователей, где я считываю неявные данные из моей базы данных MySQL с помощью Python: MySql_Connector. С данными о покупке я пытаюсь создать матрицу оценки пользовательских товаров, для которой я преобразовываю строки (700 000 строк) в столбцы с помощью pandas. Я получаю следующую ошибку при запуске pivot со всем фреймом данных.

«Ошибка значения: неупакованный фрейм данных слишком велик, вызывая переполнение int32»

 import mysql.connector
import pandas as pd
import numpy as np
from mysql.connector import errorcode
def readData():
    try:
        mySQLConnection = mysql.connector.connect(host='localhost',
                                             database='testdb',
                                             user='user',
                                             password='pwd')
        cursor = mySQLConnection.cursor(prepared=True)
        sql_select_query = """""" #Removed the select query
        cursor.execute(sql_select_query)
        record = cursor.fetchall()
        return record
    except mysql.connector.Error as error:
        print("Failed to get record from database: {}".format(error))
    finally:
        # closing database connection.
        if (mySQLConnection.is_connected()):
            cursor.close()
            mySQLConnection.close()
            print("connection is closed")

data = readData()
df = pd.DataFrame(data,columns=['user_id','product_id','purchase_count'])
data_pivot = pd.pivot_table(df,index=['user_id'],columns=df['product_id'])
#print(data_pivot.to_string())
  

python_version : 3.6
ос: win7
оперативная память: 16 ГБ
pandas_version: 0.24.2

Комментарии:

1. Такие запросы проще выполнять в базе данных . В этой статье показано, как можно преобразовать данные в MySQL. Но что вы хотите сделать с этими данными? Если у вас много продуктов, будет невозможно отобразить сводную таблицу. Его можно экспортировать, например, в файл CSV или Excel, но этот файл будет очень сложен в использовании. user, product, count Формат лучше.

2. Если вы действительно хотите преобразовать все данные, сначала подумайте, что, например, 1000 пользователей на 1000 продуктов создают 1 МЛН строк, независимо от того, приобрели они что-то или нет. Если вы все еще хотите это сделать, обратите внимание, что вам не нужно загружать всех пользователей, в то время как вам действительно нужно загружать все продукты. Это означает, что вы можете разбивать свои данные на страницы по user_id и поворачивать по одной странице результатов за раз.

3. @PanagiotisKanavos Я не смог выполнить поворот с помощью MySQL, потому что мне приходится использовать оператор CASE для более чем 10000 продуктов. Я намерен создать рейтинговую матрицу для совместной фильтрации между пользователями.

4. как тогда вы собираетесь использовать фрейм данных с 10 Тыс. столбцов? Форма строки упрощает поиск, особенно если поля проиндексированы. Что еще раз означает, что результаты были бы более полезными, если бы они хранились в базе данных. В любом случае, если вы хотите выполнить поворот, вам придется загружать данные для нескольких пользователей одновременно