Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子集数据帧扩展/切片以匹配原始数据帧列_Python_Pandas - Fatal编程技术网

Python 子集数据帧扩展/切片以匹配原始数据帧列

Python 子集数据帧扩展/切片以匹配原始数据帧列,python,pandas,Python,Pandas,问题是: 我在一个具有比测试更多特征的数据集上训练了一个分类器 数据例如,我的原始数据集每周有7天: 周一到周日,在测试数据集中,每一次观察 正好是周四,所以我少了6个功能。因此,当我 运行predict时,我得到一个错误,即功能的数量没有变化 火柴这些缺少的特征是未创建的特征 使用get_假人: 理想情况下,我希望执行数据清理并执行以下操作: 自动创建缺少的列,用0填充。自从 星期四将有所有的1,其余的应该有0 删除任何 子集数据框中不存在的“额外”列 原始训练数据。例如,get_假人可能会在

问题是:

我在一个具有比测试更多特征的数据集上训练了一个分类器 数据例如,我的原始数据集每周有7天: 周一到周日,在测试数据集中,每一次观察 正好是周四,所以我少了6个功能。因此,当我 运行predict时,我得到一个错误,即功能的数量没有变化 火柴这些缺少的特征是未创建的特征 使用get_假人:

理想情况下,我希望执行数据清理并执行以下操作:

自动创建缺少的列,用0填充。自从 星期四将有所有的1,其余的应该有0 删除任何 子集数据框中不存在的“额外”列 原始训练数据。例如,get_假人可能会在子集数据帧中创建更多级别,我想删除这些级别。 可复制示例

主数据集看起来像:

   Result  Is_Friday  Is_Monday  Is_Thursday  Is_Tuesday  Is_Wednesday
0       1          0          1            0           0             0
1       2          0          0            0           1             0
2       2          0          0            0           0             1
3      10          0          0            1           0             0
4     100          1          0            0           0             0
子集数据帧

   Result  Day_is_Saturday  Day_is_Thursday
0       1                0                1
1       2                0                1
2       2                0                1
3      10                1                0
必须做的事情:

1删除is_Saturday,因为它不在原始数据中

2添加填充了0的剩余列


我可以手工做,但看起来很麻烦。有没有一个函数可以帮我做到这一点?例如,扩展子集数据框以匹配主数据集,或删除列以匹配主数据?

简单的循环和检查应该可以添加缺少的列并删除缺少的列:

In [16]: a = pd.DataFrame([[1,2,3],[2,3,4]], columns=['A', 'B', 'E'])

In [17]: b = pd.DataFrame([[3,4,5],[4,5,6]], columns=['A', 'B', 'C'])

In [18]: for col in b.columns:
    ...:     if col not in a:
    ...:         a[col] = 0
    ...:

In [19]: for col in a.columns:
    ...:     if col not in b:
    ...:         del a[col]
    ...:

In [20]: a
Out[20]:
   A  B  C
0  1  2  0
1  2  3  0

顺便说一句,谢谢你发布这样一个完整的问题。看起来我没有在回答中使用这些信息,但这确实有助于准确理解您的目的。@scnerd没问题:谢谢您的帮助!
   Result  Day_is_Saturday  Day_is_Thursday
0       1                0                1
1       2                0                1
2       2                0                1
3      10                1                0
In [16]: a = pd.DataFrame([[1,2,3],[2,3,4]], columns=['A', 'B', 'E'])

In [17]: b = pd.DataFrame([[3,4,5],[4,5,6]], columns=['A', 'B', 'C'])

In [18]: for col in b.columns:
    ...:     if col not in a:
    ...:         a[col] = 0
    ...:

In [19]: for col in a.columns:
    ...:     if col not in b:
    ...:         del a[col]
    ...:

In [20]: a
Out[20]:
   A  B  C
0  1  2  0
1  2  3  0