【问题标题】:getting pandas Setting With Enlargement right让熊猫设置放大权
【发布时间】:2015-12-21 08:00:38
【问题描述】:

从 0.13 版开始,可以通过引用 .loc 或 .ix 中尚未在数据帧中的索引来附加到数据帧。请参阅documentation

然后我很困惑为什么这条线会失败:

all_treatments.loc[originalN:newN,:]    = all_treatments.loc[0:newrowcount,:]

这会产生一个 ValueError:

ValueError: could not broadcast input array from shape (12) into shape (0)

这里是all_treatments.shape = (53, 12)originalN = 53newN = 64all_treatments.loc[originalN:newN,:].shape = (0,12)all_treatments.loc[0:newrowcount,:].shape = (12,12)

这里设置放大的正确方法是什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您只能通过单行或单列放大设置。您正在设置范围。

    .loc/.ix/[] 操作可以在为该轴设置不存在的 key 时执行放大。

    为了您的使用,这样的东西应该可以用新的空白行来扩展数据框:

    df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
    >>> df
        a   b
    0   1   4
    1   2   5
    2   3   6
    
    new_row_count = 2
    for new_row, old_row in enumerate(range(new_row_count), start=len(df)):
        df.ix[new_row] = None
    
    >>>df
        a   b
    0   1   4
    1   2   5
    2   3   6
    3   NaN NaN
    4   NaN NaN
    

    如果您想从原始数据框中复制数据,我通常只会连接。

    df = pd.concat([df, df.iloc[:2, :]], ignore_index=True)
    

    【讨论】:

    • 太好了,我马上接受,但您能否帮忙将newrowcount 新行添加到现有数据框中?它们可能是空的,尽管我尝试复制第一行 newrowcount 以免遇到 NaN 或 NaT 或字符串问题。我知道这不是问题的确切主题。
    • 迭代听起来效率低下(我有很多行要添加),但串联是一个很好的答案,应该想到它!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2019-09-24
    • 2013-08-13
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多