相关疑难解决方法(0)

熊猫 - 就位=真正被认为有害或无效?

这已在前面讨论过,但答案相互矛盾:

我想知道的是:

  • 为什么是inplace = False默认行为?
  • 什么时候改变呢?(好吧,我被允许改变它,所以我猜这是有原因的).
  • 这是安全问题吗?也就是说,操作失败/行为失误是由于inplace = True
  • 我是否可以提前知道某项inplace = True操作是否"真正"就地进行?

我到目前为止:

  • 许多Pandas操作都有一个inplace参数,总是默认为False,意味着原始的DataFrame不受影响,并且操作返回一个新的DF.
  • 设置时inplace = True,操作可能适用于原始DF,但它可能仍在幕后复制,只需在完成后重新分配参考.

专业人士inplace = False:

  • 允许链接/功能语法:df.dropna().rename().sum()...这很好,并提供延迟评估或更有效的重新排序的机会(虽然我不认为Pandas正在这样做).
  • inplace = True在可能是底层DF的切片/视图的对象上使用时,Pandas必须进行SettingWithCopy检查,这是昂贵的.inplace = False避免这种情况.
  • 幕后一致且可预测的行为.

专业人士inplace = True:

  • 可以更快,更少内存占用(第一个链接显示reset_index()运行速度快两倍,并使用峰值内存的一半!).

因此,inplace = True除了专门编写链式语句之外,将copy-vs-view问题放在一边,总是使用它似乎更高效.但这不是默认的熊猫选择,所以我错过了什么?

python pandas

27
推荐指数
2
解决办法
7444
查看次数

如何使用nans规范化pandas列的zscore?

我有一个pandas数据帧,其中包含一些我希望zscore规范化的实数值:

>> a
array([    nan,  0.0767,  0.4383,  0.7866,  0.8091,  0.1954,  0.6307,
        0.6599,  0.1065,  0.0508])
>> df = pandas.DataFrame({"a": a})
Run Code Online (Sandbox Code Playgroud)

问题是单个nan值会产生所有数组nan:

>> from scipy.stats import zscore
>> zscore(df["a"])
array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan])
Run Code Online (Sandbox Code Playgroud)

将一个正确的方法zscore(或者不是scipy的等效函数)应用到pandas数据帧的列并让它忽略这些nan值是什么?我希望它与原始列具有相同的维度,np.nan对于无法规范化的值

编辑:也许最好的解决方案是使用scipy.stats.nanmeanscipy.stats.nanstd?我不明白为什么需要std为此目的改变自由度:

zscore = lambda x: (x - scipy.stats.nanmean(x)) / scipy.stats.nanstd(x)
Run Code Online (Sandbox Code Playgroud)

python numpy scipy pandas

16
推荐指数
3
解决办法
2万
查看次数

标签 统计

pandas ×2

python ×2

numpy ×1

scipy ×1