【问题标题】:how to append longs array to a dataframe in define positions如何将 longs 数组附加到定义位置的数据帧
【发布时间】:2021-11-01 02:01:31
【问题描述】:

我想将一些 numpy 数组附加到定义位置的数据框。 这是试图解释我的问题的示例。

假设我有这个数据框:

dfr  = pd.DataFrame()
cols = ['a','b','c','d','e','f']
dfr  = pd.DataFrame(columns = cols) 

还有这个数组:

vv = [0., 1., 2., 3.]

我想将它附加在第 2 列和第 5 列之间。 这是否可能以一种简单的方式实现。

我尝试过类似的方法:

dfr.loc[0,2:5] = vv[:]

这不起作用。我正在尝试其他解决方案,但没有一个对我有好处。

有什么建议吗?

【问题讨论】:

    标签: python arrays pandas dataframe append


    【解决方案1】:

    2:5 表示 2,3 和 4 个索引,但列表有 4 个值,这就是为什么尝试使用上述代码时会出错的原因

    dfr.loc[0,2:5] = vv[:]
    ValueError: could not broadcast input array from shape (4,) into shape (3,)
    

    如果形状匹配,那就没问题了:

    dfr.loc[0,2:] = vv[:]
    
         a    b    c    d    e    f
    0  NaN  NaN  0.0  1.0  2.0  3.0
    

    但是,在上面尝试时你会得到FutureWarning,你可以使用.iloc来摆脱警告:

    dfr.iloc[0,2:] = vv[:]
    

    【讨论】:

    • 也许我输入错误但我得到:iloc 无法放大其目标对象
    • 复制粘贴试试,本质上你不能将更大的列表分配给更小的切片
    • 它不起作用(python3.8)。我想出了用 6 nan 创建一个数组并将其与 loc 一起使用的想法。之后,我可以使用 iloc 将数据分配到我想要的位置。你怎么看?
    • @diedro,我也打算提出这个解决方案,但这个更干净。此外,与其扩展数据框,不如先创建所有数据列表或字典,然后再创建数据框,这总是更快的方法。
    • 你能在上面粘上胶水吗?
    【解决方案2】:

    vv 中有 4 个元素,但 dfr.loc[0,2:5] 中只有 3 个。 只需运行 dfr.loc[0,1:5] = vv[:]dfr.loc[0,2:6] = vv[:] 即可。

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2023-04-10
      • 2021-06-07
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多