级联(合并)一NumPy的阵列与熊猫数据帧

问题描述 投票:7回答:1

我有10行5列和零np.zeros((10,3))的numpy的基质中的熊猫数据帧。

我想Concat的的numpy的矩阵大熊猫数据帧,但我想numpy的阵列串联到它之前删除大熊猫数据帧的最后一列。

因此,我将结束与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最后一列?我如何确保我保留所有的数据类型?

python pandas numpy dataframe
1个回答
6
投票

设定

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
© www.soinside.com 2019 - 2024. All rights reserved.