Python pandas-添加缺少的列,并按相同顺序创建两个dataframe列

Python pandas-添加缺少的列,并按相同顺序创建两个dataframe列,python,pandas,Python,Pandas,两个数据帧训练和测试。列车数据帧有A、Z、D、C列,测试有C、D、Z列。我如何获取列车的列并使测试数据帧也有四列,顺序与列车相同?对于所有行,新添加的列A的值应为0 谢谢 您可以使用assign在test上创建一个新列a,并使用列名列表对列重新排序: test.assign(A = 0)[['A', 'Z', 'D', 'C']] 或:test.assign(A=0)[train.columns] 您可以使用assign在test上创建一个新列a,并使用列名列表对列重新排序: test.as

两个数据帧训练和测试。列车数据帧有A、Z、D、C列,测试有C、D、Z列。我如何获取列车的列并使测试数据帧也有四列,顺序与列车相同?对于所有行,新添加的列A的值应为0


谢谢

您可以使用
assign
test
上创建一个新列
a
,并使用列名列表对列重新排序:

test.assign(A = 0)[['A', 'Z', 'D', 'C']]
或:
test.assign(A=0)[train.columns]



您可以使用
assign
test
上创建一个新列
a
,并使用列名列表对列重新排序:

test.assign(A = 0)[['A', 'Z', 'D', 'C']]
或:
test.assign(A=0)[train.columns]



或者使用
reindex

test['A']=0
test.reindex_axis(train.columns, axis=1)

或者使用
reindex

test['A']=0
test.reindex_axis(train.columns, axis=1)

也可以按如下方式使用
pd.concat

import pandas as pd
import numpy as np

df_train = pd.DataFrame({
    "A": np.random.randn(10),
    "Z": np.random.randn(10),
    "D": np.random.randn(10),
    "C": np.random.randn(10)
})

df_test = pd.DataFrame({
    "Z": np.random.randn(10),
    "D": np.random.randn(10),
    "C": np.random.randn(10)
})

df_all = pd.concat([df_train, df_test], axis=0)
df_all = df_all.fillna(0)

df_train = df_all.iloc[0:len(df_train.index)]
df_test = df_all.iloc[len(df_train.index)+1:len(df_all.index)]

也可以按如下方式使用
pd.concat

import pandas as pd
import numpy as np

df_train = pd.DataFrame({
    "A": np.random.randn(10),
    "Z": np.random.randn(10),
    "D": np.random.randn(10),
    "C": np.random.randn(10)
})

df_test = pd.DataFrame({
    "Z": np.random.randn(10),
    "D": np.random.randn(10),
    "C": np.random.randn(10)
})

df_all = pd.concat([df_train, df_test], axis=0)
df_all = df_all.fillna(0)

df_train = df_all.iloc[0:len(df_train.index)]
df_test = df_all.iloc[len(df_train.index)+1:len(df_all.index)]

或者可以更改为
pd.concat([train,test],axis=0,keys=['train','test'])。loc['test'])。fillna(0)
,对于此类问题仍然是一种很好的新方式:~)感谢您的补充。我也很有帮助。或者可能会改为
pd.concat([train,test],axis=0,keys=[train','test'])。loc['test'])。fillna(0)
,对于这类问题仍然是一种很好的新方法:~)谢谢您的补充。我也帮了忙。