我有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
最后一列?我如何确保我保留所有的数据类型?
设定
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