首页 > 解决方案 > 连接两个 pandas 数据框进行分析

问题描述

我正在尝试解决有关顾客对餐厅偏好的问题。我有两个不同的 CSV,其中一个包含客户信息:

在此处输入图像描述

另一个有餐厅评级: 在此处输入图像描述

因此,我想尝试基于客户偏好的监督培训,以确定餐厅的评分。为了实现这一点,我认为我必须为每个评级附加客户信息(所以我将有变量要分析)。

我正在尝试使用 python 和 pandas。

我试过这个:

import pandas as pd
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from pandas.plotting import scatter_matrix
import numpy as np


df1 = pd.read_csv('/2_user_profile.csv', index_col = [0])
df2 = pd.read_csv('/3_Ratings.csv')

#Create empty dataframe with named columns
df = pd.DataFrame(columns=(np.concatenate((df2.columns.values, df1.columns.values), axis=0)))

#Joining the tables
for index, row in df2.iterrows():
    userID= row['userID']
    frame=[row, df1.loc[userID]]
    print(frame)
    df = pd.concat([df, pd.DataFrame(frame)], axis=0)

print(df)

print(frame) 会给我这个结果:

在此处输入图像描述

这是有道理的,但是当我打印 df 它给了我这个:

在此处输入图像描述

这意味着我创建的每一帧都会在数据帧上创建一个双重记录,其中一个包含来自 df1 的信息,并且与 df2 上的数据对应的所有值都是空的,另一个寄存器用于 df2 上的所有值和对应于 df1 的空值。

这是我第一次尝试 python+机器学习,所以如果你也对我的方法有意见,请告诉我。

标签: pythonpython-3.xpandas

解决方案


看起来你想加入userID两个数据框,对吧?

您可以使用merge来做到这一点。这是一个简短的例子:

import pandas as pd

data_1 = pd.DataFrame({'id': ['A', 'B'] * 5, 'value_1': [0, 1] * 5})
data_2 = pd.DataFrame({'id': ['A', 'B'], 'value_2': [3, 4]})

data_1.merge(data_2, how = 'inner', left_on = 'id', right_on = 'id')

给出:

在此处输入图像描述


推荐阅读