Jam*_*een 11 python numpy dataframe pandas
我有一个10行5列的pandas数据帧和一个零的numpy矩阵np.zeros((10,3))
.
我想将numpy矩阵连接到pandas数据帧,但是我想在将numpy数组连接到它之前从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)
Run Code Online (Sandbox Code Playgroud)
哪里original_dataframe
有10行5列.
如何original_dataframe
在连接numpy数组之前删除最后一列?我如何确保保留所有数据类型?
设定
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
有用(和高性能),但不保留中的列名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
Run Code Online (Sandbox Code Playgroud)
pd.concat
您将需要将数组转换为DataFrame。
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)