【问题标题】:Concatenate (join) a NumPy array with a pandas DataFrame将 NumPy 数组与 pandas DataFrame 连接(连接)
【发布时间】:2017-02-03 12:47:39
【问题描述】:

我有一个 10 行 5 列的 pandas 数据框和一个零矩阵 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)

其中original_dataframe 有 10 行和 5 列。

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

【问题讨论】:

  • 您可以将原始 df new_dataframe = pd.concat([original_dataframe.ix[:, :-1], pd.DataFrame(np.zeros((10, 3)), dtype=np.int)], axis=1, ignore_index=True) 切片,关于您的最后一条评论,数据类型是否仍然保留?
  • ix 现在已弃用,因此请考虑使用ilocloc。请参阅下面的my answer
  • @Jamgreen,友好的 ping。 . .您可能已经从这个问题继续前进,但如果您认为答案可以解决这个问题,您会考虑将其标记为接受吗?谢谢!

标签: python pandas numpy dataframe


【解决方案1】:

设置

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

您需要将数组转换为 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

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

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 2017-12-02
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2016-04-17
    相关资源
    最近更新 更多