Python 将数据帧列转换为特征和目标矩阵的更快方法
我在数据帧(df)中有一列(二进制),其形式如下:Python 将数据帧列转换为特征和目标矩阵的更快方法,python,pandas,Python,Pandas,我在数据帧(df)中有一列(二进制),其形式如下: Vector 0 1 0 1 0 . . . 我在一个二元分类模型中使用它。我的目标是将这些0和1移动到两个单独的列表中,然后将它们转换为numpy数组。例如,我想将前5项从Vector移到X,然后将第6项移到Y。然后将下5项移到X,然后将下6项移到Y,直到df结束(目前为200k行) 我的第一反应是为此编写for循环(但我知道这是非常低效的): 用于范围内的i(0,df.形状[0]-6): #当我们遍历df时 #我们将使用步骤5 如果i_c
Vector
0
1
0
1
0
.
.
.
我在一个二元分类模型中使用它。我的目标是将这些0和1移动到两个单独的列表中,然后将它们转换为numpy数组。例如,我想将前5项从Vector移到X,然后将第6项移到Y。然后将下5项移到X,然后将下6项移到Y,直到df结束(目前为200k行)
我的第一反应是为此编写for循环(但我知道这是非常低效的):
用于范围内的i(0,df.形状[0]-6):
#当我们遍历df时
#我们将使用步骤5
如果i_cnt>5:
y=df['Vector'].iloc[i]
Y.append(Y)
i_cnt=1
其他:
x=df['Vector'].iloc[i]
X.append(X)
i_cnt+=1
确实有一种更快的方法可以做到这一点,希望有人知道我如何做到这一点?通过索引长度创建的数组使用模和
6
,并比较X
和Y
:
#sample data for easy verify
df = pd.DataFrame({'Vector': range(20)})
idx = np.arange(len(df)) % 6
通过索引长度创建的数组对
6
使用模,并比较X
和Y
:
#sample data for easy verify
df = pd.DataFrame({'Vector': range(20)})
idx = np.arange(len(df)) % 6
对于
k=5+1=6
k = 6
n_rows = len(df.index)
n_samples = n_rows // k
X_and_y = df.Vector.to_numpy().reshape(n_samples, k)
X = X_and_y[:, :-1]
y = X_and_y[:, -1]
我们将列重塑为(n_samples,5+1)
数组,其中n_samples=n_rows/6
,然后将除最后一列之外的所有列都放入X
,最后一列放入y
e、 g
对于
k=5+1=6
k = 6
n_rows = len(df.index)
n_samples = n_rows // k
X_and_y = df.Vector.to_numpy().reshape(n_samples, k)
X = X_and_y[:, :-1]
y = X_and_y[:, -1]
我们将列重塑为(n_samples,5+1)
数组,其中n_samples=n_rows/6
,然后将除最后一列之外的所有列都放入X
,最后一列放入y
e、 g
你可以试试
X = list(df[df.index % 6 < 5]["Vector"])
y = list(df[df.index % 6 == 5]["Vector"])
X=list(df[df.index%6<5][“Vector”])
y=列表(df[df.index%6==5][“Vector”])
您可以试试
X = list(df[df.index % 6 < 5]["Vector"])
y = list(df[df.index % 6 == 5]["Vector"])
X=list(df[df.index%6<5][“Vector”])
y=列表(df[df.index%6==5][“Vector”])
我得到以下错误:TypeError:无法使用此索引类型执行uuu mod_uuuu:index
您可以共享df.index
的输出吗?请尝试x=list(df[df.reset\u index().index%6<5][Vector”])
和y=list(df[df.reset\u index().index%6==5][Vector”])
我得到以下错误:TypeError:无法使用此索引类型执行uuu mod_uuuu:index
您可以共享df.index
的输出吗?请尝试x=list(df[df.reset\u index().index%6<5][Vector”])
和y=list(df[df.reset\u index().index%6==5][Vector”])
在线idx=df.index%6
我得到以下错误:TypeError:无法使用此索引类型执行修改:index
@Dean-然后需要idx=np.arange(len(df))%6
在线idx=df.index%6
我得到以下错误:TypeError:无法使用此索引类型执行修改:index
@Dean-然后需要idx=np.arange(len(df))%6