【问题标题】:Iterating over dataframes with different attributes迭代具有不同属性的数据框
【发布时间】:2021-09-03 21:25:12
【问题描述】:

我正在尝试了解如何在 for 循环中正确迭代具有略微不同属性(如列名)的不同数据帧。

我特别想做的是在每个数据集上训练一个机器学习模型,并将另一个用作测试集。

假设我有两个数据框df1df2:我最初所做的是将它们附加到一个列表中:

my_list = [df1, df2]

但是我不确定如何正确迭代这些对象,因为它们具有不同的属性。例如,我想依次排除“目标”列变量,但正如我所说,它在df1, df2 中的调用方式不同。鉴于此,例如名称分别为“target1”和“target2”,我想要做的是:

for df in my_list:

  if 'target1' in df.columns:
    X = df.drop('target1', axis=1)
    model.fit(X,target1)

  ...

但我不确定这是正确的方式..

编辑:好的,这些是df1.head(), df2.head() 的输出(我只是在这里做一个例子,因为原始数据是机密的)。

我正在处理一个化学数据集,正如您所见,它们非常相似,除了一些名称不同的列(温度和目标)。

df1.head()

Temperature     feat_1       feat_2      feat_3       target1
   300            2.4          1.2         2.4          1.5
   298            3.2          1.5         5.7          3.4
   300            2.4          1.2         2.4          1.5
   298            1.6          1.5         3.2          3.4
   298            3.2          1.5         2.4          1.4

df2.head()

  Temp           feat_1       feat_2      feat_3       target2
   298            3.4          1.2         3.4          2.5
   298            6.2          1.5         4.7          3.4
   300            2.4          3.3         2.4          4.5
   298            4.6          2.5         9.2          3.4
   298            3.2          1.5         5.4          6.4

因此,对于这两个数据集中的每一个,我希望依次在整个数据集上训练模型并在另一个上进行测试,反之亦然,一切都在 for 循环中完成。

【问题讨论】:

  • 您能否用df1.head(5)df2.head(5) 的输出以及预期的结果更新您的帖子?
  • 我已经更新了帖子的更多详细信息,如果您需要任何其他信息,请告诉我,非常感谢您的帮助。

标签: pandas dataframe


【解决方案1】:

如果您的列按名称排序,请使用np.concatenate

from sklearn.model_selection import train_test_split

data = np.concatenate([df1, df2])
X, y = data[:, :-1], data[:, -1]
X_train, X_test, y_train, y_test = \
    train_test_split(X, y, train_size=len(df1), test_size=len(df2))

# From here, create your pipeline.

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 2018-11-30
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多