Python 大熊猫长着浓密而稀疏的骡子

Python 大熊猫长着浓密而稀疏的骡子,python,pandas,sparse-matrix,Python,Pandas,Sparse Matrix,我有一个时间索引的DataFrame,其中只有一部分数据是有效的(出于某些“外部”原因) 我制作了一个时间索引的系列,其中1s用于有效数据,而NaNs用于无效数据,因此我可以将其用作我的数据帧上的掩码 这个系列是稀疏的 import pandas as pd import numpy as np rng = pd.date_range(start='2014-07-09', periods=5, freq='D') data = np.random.randn(len(rng), 3) col

我有一个时间索引的
DataFrame
,其中只有一部分数据是有效的(出于某些“外部”原因)

我制作了一个时间索引的
系列
,其中
1
s用于有效数据,而
NaN
s用于无效数据,因此我可以将其用作我的
数据帧
上的掩码

这个系列是稀疏的

import pandas as pd
import numpy as np

rng = pd.date_range(start='2014-07-09', periods=5, freq='D')
data = np.random.randn(len(rng), 3)
col_names = ['spam', 'ham', 'eggs']    
df = pd.DataFrame(data=data, index=rng, columns=col_names)    
valid_days = np.nan * np.ones_like(df.spam.values)
valid_days[2] =  1    
validity_mask = pd.SparseSeries(data=valid_days, index=rng)
我希望
df.mul(validity\u mask,axis=0)
给我一套非NaN
垃圾邮件、火腿、鸡蛋
,相反,我得到了:

In [2]: df.mul(validity_mask, axis=0)
AssertionError: length mismatch: 5 vs. 3

答案当然是,我们需要在乘法之前将其转换为密集型

df.mul(validity_mask.to_dense(), axis=0)
给出了以下方面的预期结果:

                spam       ham     eggs
2014-07-09       NaN       NaN      NaN
2014-07-10       NaN       NaN      NaN
2014-07-11  1.943166 -0.342399 -0.31517
2014-07-12       NaN       NaN      NaN
2014-07-13       NaN       NaN      NaN
我之所以把这个放在这里,是因为我在
熊猫
中找不到任何关于显式演员的信息,只是简单地说“从功能上讲,它们的行为应该与密集型演员几乎相同。”