本文将带您了解关于合并来自原始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的方法)
- dict to pandas pandas DataFrame的dict列表
- Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe
- Pandas Dataframe 在两个不同的键上合并以获取原始数据
- Pandas DataFrame.to_sql()函数是否需要后续的commit()?
合并来自原始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:值的长度与索引的长度不匹配
我知道可以将分解df
为train_df
,test_df
并且这个问题可以解决,但实际上,我需要按照上述路径创建矩阵,X
并且y
(我的实际问题是文本分类问题,在分解之前,我要对
整个 特征矩阵进行归一化培训和测试)。df
由于y_hats
数组的索引为零,并且关于 哪些
行包含在中X_test
并y_test
丢失了,因此如何将这些预测值与我的适当行对齐?还是将我降级为先将数据帧拆分为训练测试,然后再构建特征矩阵?我想只需填写包括在行train
与np.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列表?
我想在数据帧中转换 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
我能够使用下面的方法获得所需的输出
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 在两个不同的键上合并以获取原始数据?
问题标题可能令人困惑,但这是我打算执行的示例。
下面是一个带有请求数据的主要数据框
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()?
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()?等相关内容,可以在本站寻找。
本文标签: