错误消息:无法使用<class'numpy.ndarray'=“”>的这些索引器[[2]]在<class'pandas.core.indexes.range.rangeindex'=“”>上进行切片索引

时间:2018-10-07 21:19:40

标签: python pandas numpy dataframe

我想根据存储在数组中的索引将行从一个数据帧复制到另一个数据帧。使用以下代码时:

df1=pd.DataFrame(
   {
        "column_1": [1, 2, 3, 4],
        "column_2": ['A','B','C','D'],
        "column_3": [3.1, 7.8, 9.0, 5.8]
   }
)
   Arr1=np.array([[2],[3]])

   column_name = ['column_2','column_3'];
   index_row=range(4);
   df2 = pd.DataFrame(index=index_row,columns=column_name);

   for i in range(4):
          df2[i:i+1]=df1[(Arr1[i]):(Arr1[i]+1)]

我收到以下错误:无法使用类'numpy.ndarray'的这些索引器[[2]]对类'pandas.core.indexes.range.RangeIndex'进行切片索引。

有人可以建议正确的方法吗?

1 个答案:

答案 0 :(得分:0)

要正确使用ID,请将数组转换为仅包含值的列表。 i[0]从列表[2]和[3]中获得第一个(在这种情况下,只有一个)值。

然后使用.loc[ids,columns]选择要复制的行和列。此处无需循环。 那是一种更简便,更快捷的方法

df1=pd.DataFrame({
    "column_1": [1, 2, 3, 4],
    "column_2": ['A','B','C','D'],
    "column_3": [3.1, 7.8, 9.0, 5.8]})
Arr1=np.array([[2],[3]])
#------------new-----------------
ids=[i[0] for i in Arr1.tolist()]
#--------------------------------


column_name = ['column_2','column_3']


#------------new-----------------
df2 = df1.loc[ids,column_name]
#--------------------------------