【问题标题】:Why is a pandas dataframe.query -> assign returning the original dataset size?为什么 pandas dataframe.query -> assign 返回原始数据集大小?
【发布时间】:2018-11-02 02:59:04
【问题描述】:

几个小时以来,我一直在寻找这个问题的答案。我正在使用 python 3.6.7 和 pandas 0.23.4。我正在尝试使用 query() 从数据框中获取行的子集,然后将其他列添加到该子集中。下面是sn-p的代码:

df.query(f'({column}_c != {column}_c) & ({column}_t == {column}_t)')
                       .assign(reason='Calculated has value but target does not',
                               name=column,
                               calced=df[column + '_c'],
                               targeted=df[column + '_t'])

原始数据帧大约有 29K 行,当我只运行该链的查询部分时,我得到 0 行。但是,在 assign() 之后,我又多了 29K 行。我认为 query() 复制了数据框,所以我不希望出现这种行为。任何人都知道发生了什么(我也尝试了 df[] 方法,结果相同)

【问题讨论】:

  • 您的查询返回一个空 DataFrame,并且您使用原始 DataFrame 为该空 DataFrame 分配(几个)新列,因此最后的行数相同。这与分配无关。这是关于您添加的新列(例如df[column + '_c']。这是指原始数据帧,而不是新创建的空数据帧。)

标签: python-3.x pandas


【解决方案1】:

assign() 中的“df”引用似乎是原始数据帧。它将导致为原始数据框中的每一行构建一行。解决这个问题的方法是将过滤后的数据帧分配给一个临时变量并将其用于 assign()。

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2019-09-29
    • 2019-12-05
    • 2021-02-24
    • 2020-01-21
    • 2023-04-10
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多