GVKun编程网logo

合并来自原始pandas DataFrame的model.predict()结果?(合并dataframe的方法)

12

本文将带您了解关于合并来自原始pandasDataFrame的model.predict的新内容,同时我们还将为您解释结果?的相关知识,另外,我们还将为您提供关于dicttopandaspandasD

本文将带您了解关于合并来自原始pandas DataFrame的model.predict的新内容,同时我们还将为您解释结果?的相关知识,另外,我们还将为您提供关于dict to pandas pandas DataFrame的dict列表、Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、Pandas Dataframe 在两个不同的键上合并以获取原始数据、Pandas DataFrame.to_sql()函数是否需要后续的commit()?的实用信息。

本文目录一览:

合并来自原始pandas DataFrame的model.predict()结果?(合并dataframe的方法)

合并来自原始pandas DataFrame的model.predict()结果?(合并dataframe的方法)

我正在尝试将predict方法的结果与pandas.DataFrame对象中的原始数据合并在一起。

from sklearn.datasets import load_irisfrom sklearn.cross_validation import train_test_splitfrom sklearn.tree import DecisionTreeClassifierimport pandas as pdimport numpy as npdata = load_iris()# bear with me for the next few steps... I''m trying to walk you through# how my data object landscape looks... i.e. how I get from raw data # to matrices with the actual data I have, not the iris dataset# put feature matrix into columnar format in dataframedf = pd.DataFrame(data = data.data)# add outcome variabledf[''class''] = data.targetX = np.matrix(df.loc[:, [0, 1, 2, 3]])y = np.array(df[''class''])# finally, split into train-testX_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8)model = DecisionTreeClassifier()model.fit(X_train, y_train)# I''ve got my predictions nowy_hats = model.predict(X_test)

要将这些预测与原始预测合并起来df,我可以尝试以下方法:

df[''y_hats''] = y_hats

但这引起了:

ValueError:值的长度与索引的长度不匹配

我知道可以将分解dftrain_dftest_df并且这个问题可以解决,但实际上,我需要按照上述路径创建矩阵,X并且y(我的实际问题是文本分类问题,在分解之前,我要对
整个 特征矩阵进行归一化培训和测试)。df由于y_hats数组的索引为零,并且关于 哪些
行包含在中X_testy_test丢失了,因此如何将这些预测值与我的适当行对齐?还是将我降级为先将数据帧拆分为训练测试,然后再构建特征矩阵?我想只需填写包括在行trainnp.nan
数据框中的值。

答案1

小编典典

您的y_hats长度仅是测试数据上的长度(20%),因为您在X_test上进行了预测。一旦模型通过验证并且对测试预测满意(通过检查模型在X_test预测上与X_test真实值相比的准确性),您应该在完整数据集(X)上重新运行预测。将这两行添加到底部:

y_hats2 = model.predict(X)df[''y_hats''] = y_hats2

*根据您的评论进行 *编辑 ,这是一个更新的结果,返回带有预测的数据集并附加在测试数据集中

from sklearn.datasets import load_irisfrom sklearn.cross_validation import train_test_splitfrom sklearn.tree import DecisionTreeClassifierimport pandas as pdimport numpy as npdata = load_iris()# bear with me for the next few steps... I''m trying to walk you through# how my data object landscape looks... i.e. how I get from raw data # to matrices with the actual data I have, not the iris dataset# put feature matrix into columnar format in dataframedf = pd.DataFrame(data = data.data)# add outcome variabledf_class = pd.DataFrame(data = data.target)# finally, split into train-testX_train, X_test, y_train, y_test = train_test_split(df,df_class, train_size = 0.8)model = DecisionTreeClassifier()model.fit(X_train, y_train)# I''ve got my predictions nowy_hats = model.predict(X_test)y_test[''preds''] = y_hatsdf_out = pd.merge(df,y_test[[''preds'']],how = ''left'',left_index = True, right_index = True)

dict to pandas pandas DataFrame的dict列表

dict to pandas pandas DataFrame的dict列表

如何解决dict to pandas pandas DataFrame的dict列表?

我想在数据帧中转换 future_df:

item1 = {''name'': ''A'',''parameters'': [{''Parameter'': ''P1'',''Value'': 0.0},{''Parameter'': ''P2'',''Value'': 0.4}]}
item2 = {''name'': ''B'',''Value'': 3},''Value'': 7}]}
future_df = [item1,item2]

我用丑陋的以下几行实现了这一点:

df = {}
for item in future_df:
    dic = {key[''Parameter'']:key[''Value''] for key in item[''parameters'']}
    df[future_df[''name'']] = dic
    
df = pd.DataFrame(df.values(),index=df.keys())

我知道这是一个非常硬编码的解决方案,必须有一个更干净优雅的解决方案。我想 json_normalize 函数可能会有所帮助,但我没有找到如何正确使用它的方法。

解决方法

我不知道如果你先写一个函数来将它旋转宽是否有必要更好:

def ToDF(item):
    x = pd.DataFrame(item[''parameters''])
    x.insert(0,"name",item[''name''])
    return x.pivot_table(columns="Parameter",values="Value",index="name")

然后像这样连接:

df = pd.concat([ToDF(i) for i in future_df])
df

Parameter   P1   P2
name               
A          0.0  0.4
B          3.0  7.0
,

技术上是单行的:

print (pd.DataFrame({i["name"]: {v["Parameter"]: v["Value"] for v in i["parameters"]}
                     for i in future_df}).T)

    P1   P2
A  0.0  0.4
B  3.0  7.0

Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

我能够使用下面的方法获得所需的输出

df1.merge(df2,left_on = df2.prod_ref.str.extract(''(\d+)'',expand = False),right_on = df1.prod_id.str.extract(''(\d+)'',how = ''left'')

Pandas Dataframe 在两个不同的键上合并以获取原始数据

Pandas Dataframe 在两个不同的键上合并以获取原始数据

如何解决Pandas Dataframe 在两个不同的键上合并以获取原始数据?

问题标题可能令人困惑,但这是我打算执行的示例。

下面是一个带有请求数据的主要数据框

d = {''ID'':[''A1'',''A2'',''A3'',''A4''],''ID2'': [''B1'',''B2'',''B3'',''B4''],''B'':[-1,5,6,7000],''ExtD'':[''CA'',''CB'',''CC'',''CD'']}
df = pd.DataFrame(data=d)
df

现在,响应可能基于 ID 或 ID2 列,如下所示 -

d = {''RetID'':[''A1'',''C'':[1.3,5.4,4.5,1.3]}
df2 = pd.DataFrame(data=d)
df2

其中 RetID 可以是请求中的 ID 或 ID2 以及附加数据 C。一旦收到响应,我需要将其与原始数据帧合并以获取数据 ExtD。

我想出的解决方案是 -

df2 = df2.merge(df[[''ID'',''ExtD'',]],''left'',left_on=[''RetID''],right_on=[''ID''])
df2 = df2.merge(df[[''ID2'',''ExtD'']],right_on=[''ID2''],suffixes = (''_d1'',''_d2''))
df2.rename({''ExtD_d1'':''ExtD''},axis=1,inplace=True)
df2.loc[df2[''ExtD''].isnull(),''ExtD''] = df2[''ExtD_d2'']
df2.drop({''ID2'',''ExtD_d2''},inplace=True)

所以预期的输出是,

res = {''RetID'':[''A1'',1.3],''CD'']}
df2= pd.DataFrame(data=res)
df2

EDIT2:更新了需求调整。

res = {''RetID'':[''A1'',''B1'',''B2''],''CD''],''ID'':[''A1'',''B4'']}

有没有一种有效的方法来做到这一点?可能有 2 个以上的 ID - ID、ID2、ID3 和不止一列要从请求数据帧加入。 TIA。

编辑:修正了错字。

解决方法

使用 melt 转换您的第一个数据框,然后使用 merge 转换第二个:

tmp = df.melt(''ExtD'',value_vars=[''ID'',''ID2''],value_name=''RetID'')
df2 = df2.merge(tmp[[''ExtD'',''RetID'']])
>>> df2
  RetID    C ExtD
0    A1  1.3   CA
1    A2  5.4   CB
2    B1  4.5   CA
3    B2  1.3   CB

>>> tmp
  ExtD variable RetID
0   CA       ID    A1
1   CB       ID    A2
2   CC       ID    A3
3   CD       ID    A4
4   CA      ID2    B1
5   CB      ID2    B2
6   CC      ID2    B3
7   CD      ID2    B4

更新

如果我还需要合并 ID 和 ID2 列怎么办?

df2 = df2.merge(df[[''ID'',''ID2'',''ExtD'']],on=''ExtD'')
>>> df2
  RetID    C ExtD  ID ID2
0    A1  1.3   CA  A1  B1
1    A2  5.4   CB  A2  B2
2    B3  4.5   CC  A3  B3
3    B4  1.3   CD  A4  B4

Pandas DataFrame.to_sql()函数是否需要后续的commit()?

Pandas DataFrame.to_sql()函数是否需要后续的commit()?

to_sql()适用于DataFrame对象的Pandas函数的文档(请参阅to_sql()文档)没有指出commit()需要(或建议)对连接进行调用以保持更新。

我可以放心地假设这DataFrame.to_sql(''table_name'', con)将始终自动提交更改(例如:)con.commit()吗?

答案1

小编典典

是的,一天结束时,它将自动提交。

熊猫调用SQLAlchemy方法executemany(用于SQL Alchemy连接):

conn.executemany(self.insert_statement(), data_list)

对于SQLite连接:

def run_transaction(self):    cur = self.con.cursor()    try:        yield cur        self.con.commit()    except:        self.con.rollback()        raise    finally:        cur.close()

并且由于SQL炼金术文档 executemany的问题commit

关于合并来自原始pandas DataFrame的model.predict结果?的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于dict to pandas pandas DataFrame的dict列表、Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、Pandas Dataframe 在两个不同的键上合并以获取原始数据、Pandas DataFrame.to_sql()函数是否需要后续的commit()?等相关内容,可以在本站寻找。

本文标签: