将NumPy数组与pandas DataFram连接(联接)

2024-04-28 12:50:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,它有10行5列,numpy矩阵是零np.zeros((10,3))

我想将numpy矩阵连接到pandas数据帧,但我想在将numpy数组连接到pandas数据帧之前删除pandas数据帧中的最后一列。

所以我将得到一个10行5-1+3=7列的矩阵。

我想我可以用

new_dataframe = pd.concat([
    original_dataframe,
    pd.DataFrame(np.zeros((10, 3)), dtype=np.int)
], axis=1, ignore_index=True)

其中original_dataframe有10行5列。

如何在连接numpy数组之前从original_dataframe中删除最后一列?如何确保保留所有数据类型?


Tags: 数据numpydataframepandasnewnpzeros矩阵
0条回答
网友
1楼 · 发布于 2024-04-28 12:50:45

设置

np.random.seed(0)
df = pd.DataFrame(np.random.choice(10, (3, 3)), columns=list('ABC'))
df

   A  B  C
0  5  0  3
1  3  7  9
2  3  5  2

np.column_stack/stack(axis=1)/hstack

pd.DataFrame(pd.np.column_stack([df, np.zeros((df.shape[0], 3), dtype=int)]))

   0  1  2  3  4  5
0  5  0  3  0  0  0
1  3  7  9  0  0  0
2  3  5  2  0  0  0

有用(并执行),但不保留df中的列名。如果您真的想切掉最后一列,请使用iloc并切掉它:

pd.DataFrame(pd.np.column_stack([
    df.iloc[:, :-1], np.zeros((df.shape[0], 3), dtype=int)]))

   0  1  2  3  4
0  5  0  0  0  0
1  3  7  0  0  0
2  3  5  0  0  0

pd.concat

您需要将数组转换为数据帧。

df2 = pd.DataFrame(np.zeros((df.shape[0], 3), dtype=int), columns=list('DEF'))
pd.concat([df, df2], axis=1)

   A  B  C  D  E  F
0  5  0  3  0  0  0
1  3  7  9  0  0  0
2  3  5  2  0  0  0

DataFrame.assign

如果只是添加常量值,则可以使用assign

df.assign(**dict.fromkeys(list('DEF'), 0))

   A  B  C  D  E  F
0  5  0  3  0  0  0
1  3  7  9  0  0  0
2  3  5  2  0  0  0

相关问题 更多 >