Python 按索引调用数据帧时超出预期的行数
我有两个不同的文件。z_df和s_df。它们的第一列是相同的(它是时间点)。每行都是唯一的时间实例 现在我想分别在z_-df和s_-df上构建一个分类器。那很好。但问题是我想对他们的训练和测试集使用相同的索引。例如,如果选择前四行z_df进行训练,则必须同时选择前四行s_dfPython 按索引调用数据帧时超出预期的行数,python,pandas,dataframe,scikit-learn,Python,Pandas,Dataframe,Scikit Learn,我有两个不同的文件。z_df和s_df。它们的第一列是相同的(它是时间点)。每行都是唯一的时间实例 现在我想分别在z_-df和s_-df上构建一个分类器。那很好。但问题是我想对他们的训练和测试集使用相同的索引。例如,如果选择前四行z_df进行训练,则必须同时选择前四行s_df z_df.shape, s_df.shape: ((450865, 5), (450865, 930)) train_df, test_df = train_test_split(z_df, test
z_df.shape, s_df.shape:
((450865, 5), (450865, 930))
train_df, test_df = train_test_split(z_df, test_size=TEST_SIZE, shuffle=True )
train_df.shape:
(315605, 5)
m=train_df[0].tolist()
len(m), train_df.shape:
(315605, (315605, 5))
s_train=s_df[s_df[0].isin(m)]
s_train.shape, train_df.shape:
((362774, 930), (315605, 5))
正如您所看到的,s_列的行数与s_df列的行数不同。为什么?我用第一栏来称呼他们。为什么会这样?我做错了什么?很可能是因为您的
s_df[0]
包含重复项。这可以通过len(s_df[0])==len(s_df[0].unique())
来确认
要对两个数据集进行采样,请执行以下操作:
is_train = np.random.choice((True, False), size=len(s_df), p=(0.7, 0.3))
s_train, z_train = s_df[is_train], z_df[is_train]
s_test, z_test = s_df[~is_train], z_df[~is_train]
train_df[0]
和s_df[s_df[0].isin(m)]
都没有按索引调用数据帧。@quanghaang你说得对。这将通过其第一列调用数据帧。但这也应该奏效。它们的第一列是相同的。您确定s_df[0]中的值是唯一的吗?什么是len(s_df[0].unique()
?@QuangHoang你知道了!谢谢你的帮助。请回答页面中的问题,以便我确认此解决方案。谢谢你的帮助。我应该早点问:)。我花了两个小时也没用。