对熊猫轴工作的怀疑我的代码可能是关闭的



我的问题是,我正在从一个字典中创建一个panda数据帧,最终看起来像[70k300]。我正在尝试对每个单元格进行规范化,无论是按列还是按行后,再行后列。

我以前也问过类似的问题,但这是一个[70k,70k]的数据帧,非常方正,只需要做这个就可以了

dfNegInfoClearRev = (df - df.mean(axis=1)) / df.std(axis=1).replace(0, 1)
dfNegInfoClearRev = (dfNegInfoClearRev - dfNegInfoClearRev.mean(axis=0)) / dfNegInfoClearRev.std(axis=0).replace(0, 1)
print(dfNegInfoClearRev)

这是我在[70k,70k]的情况下所需要的。当我用[70k300]尝试同样的原理时,出现了一个问题,如果我这样做的话:


dfRINegInfo = (dfRI - dfRI.mean(axis=0)) / dfRI.std(axis=0).replace(0, 1)
dfRINegInfoRows = (dfRINegInfo - dfRINegInfo.mean(axis=1)) / dfRINegInfo.std(axis=1).replace(0, 1)

不知怎么的,我得到了一个[70k,70k+300],里面装满了同名的NaN。

我最终做了这个:

dfRIInter = dfRINegInfo.sub(dfRINegInfo.mean(axis=1), axis=0)
dfRINegInfoRows = dfRIInter.div(dfRIInter.std(axis=1), axis=0).fillna(1).replace(0, 1)
print(dfRINegInfoRows)

但我不确定这是否是我想要做的,也不明白为什么在列正常化后行正常化会给我一个[70k,70k+300],我也不确定这种方式是否有效。有什么帮助吗?

我认为您的新代码正在做您想要做的事情。

如果我们看一个3x3玩具的例子:

df = pd.DataFrame([
[1, 2, 3],
[2, 4, 6],
[3, 6, 9],
])

axis=1的平均值为:

df.mean(axis=1)
# 0    2.0
# 1    4.0
# 2    6.0
# dtype: float64

减法适用于每一行(即[1,2,3] - [2,4,6]元素、[2-4-6] - [2,4,6][3,6,9] - [2,4,6](:

df - df.mean(axis=1)
#      0    1    2
# 0 -1.0 -2.0 -3.0
# 1  0.0  0.0  0.0
# 2  1.0  2.0  3.0

因此,如果我们有df2形状的3x2:

df2 = pd.DataFrame([
[1,2],
[3,6],
[5,10],
])

axis=1平均值仍然是长度3:

df2.mean(axis=1)
# 0    1.5
# 1    4.5
# 2    7.5
# dtype: float64

相减将导致第三列为nan(即[1,2,nan] - [1.5,4.5,7.5]元素、[3,6,nan] - [1.5,4.5,7.5][5,10,nan] - [1.5,4.5,7.5](:

df2 - df2.mean(axis=1)
#      0    1   2
# 0 -0.5 -2.5 NaN
# 1  1.5  1.5 NaN
# 2  3.5  5.5 NaN

如果你沿着axis=0做减法,那么它会像预期的那样工作:

df2.sub(df2.mean(axis=1), axis=0)
#      0    1
# 0 -0.5  0.5
# 1 -1.5  1.5
# 2 -2.5  2.5

因此,当您在(70000, 300)(70000,1)之间使用默认减法时,nan将有69700列。

相关内容

  • 没有找到相关文章

最新更新