python - 初始化带索引和不带索引的 pandas 数据框,列会产生不同的结果

标签 python numpy pandas

如果我使用以下方法来构造 pandas.DataFrame,我会得到一个(我认为)很奇特的输出:

import pandas, numpy

df = pandas.DataFrame(
    numpy.random.rand(100,2), index = numpy.arange(100), columns = ['s1','s2'])
smoothed = pandas.DataFrame(
    pandas.ewma(df, span = 21), index = df.index, columns = ['smooth1','smooth2'])

当我查看平滑值时,我得到:

>>> smoothed.tail()
smooth1  smooth2
95      NaN      NaN
96      NaN      NaN
97      NaN      NaN
98      NaN      NaN
99      NaN      NaN

这看起来像是以下碎片调用的聚合,会产生不同的结果:

smoothed2 = pandas.DataFrame(pandas.ewma(df, span = 21))
smoothed2.index = df.index
smoothed2.columns = ['smooth1','smooth2']

再次使用 DataFrame.tail() 调用我得到:

>>> smoothed2.tail()
smooth1   smooth2
95  0.496021  0.501153 
96  0.506118  0.507541
97  0.516655  0.544621
98  0.520212  0.543751
99  0.518170  0.572429

任何人都可以提供为什么这些 DataFrame 构建方法应该不同的理由吗?

最佳答案

ewma(df, span=21) 的结果已经是一个 DataFrame,因此当您将其与列列表一起传递给 DataFrame 构造函数时,它会“选择”出需要的列你通过了。在这种特殊情况下,很难打破标签和数据之间的链接。如果您这样做了:

In [23]: smoothed = DataFrame(ewma(df, span = 21).values, index=df.index, columns = ['smooth1','smooth2'])
In [24]: smoothed.head()
Out[24]: 
    smooth1   smooth2
0  0.218350  0.877693
1  0.400214  0.813499
2  0.308564  0.739426
3  0.433341  0.641891
4  0.525260  0.620541

这没问题。当然

smoothed = ewma(df, span=21)
smoothed.columns = ['smooth1', 'smooth2']

也很好

关于python - 初始化带索引和不带索引的 pandas 数据框,列会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421412/

相关文章:

python - 创建自定义日期范围,一天 22 小时 python

python - 简单数据集 regplot 中的 keyerror - AttributeError : 'str' object has no attribute 'conjugate'

python - 合并两个不同的日期时间列以形成一个序列

python - Sendgrid Python 库和模板

python - 如何使用 Python 将未知整数分成给定数量的偶数部分

python - 无法绘制图表 : matplotlib is needed for plotting

python - 用于改进 cython 代码的高效矩阵向量结构

python - 通过用前一个值填充中间值来增加数组的大小

python - NumPy 或 SciPy 计算加权中位数

python - 如何创建指向另一个 html 页面的链接?