【问题标题】:Concatenate two pandas dataframes for analysis连接两个 pandas 数据框进行分析
【发布时间】:2018-06-20 06:37:41
【问题描述】:

我正在尝试解决有关顾客对餐厅偏好的问题。我有两个不同的 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+机器学习,如果您对我的方法也有意见,请告诉我。

【问题讨论】:

  • 所以你只想加入列?

标签: python python-3.x pandas


【解决方案1】:

看起来您想在两个数据帧中加入 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')

给予:

【讨论】:

  • 天哪,我真的需要查看文档。非常感谢!
猜你喜欢
  • 2021-10-09
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多