两个df之间的减法得出NAN值

时间:2019-02-18 22:53:12

标签: python pandas numpy

我有一个numpy.ndarray,其中包含17520行和1000列。 np.ndarray仅具有两个值[0,0.05]。我想修改值为0.05的单元格,以便在0到0.05之间进行随机选择。为了做到这一点,我使用了帖子推荐的以下功能 Random choice over specific values of a DF

import pandas as pd
df = pd.DataFrame(df)    
df.update(np.random.choice([0, 0.05], size=df.shape), filter_func=lambda x: x==0.05)

此解决方案有效,但是,我还有另一个pandas.DataFrame对象df1,并且需要创建另一个数据框对象。新数据帧df_new是这两个数据帧不同的结果。我使用简单的操作:

df_new = df1 - df

但是,df_new的结果是一个具有不同维度(17520行,2000列)和NAN值的数据框。

您是否知道为什么会这样?

谢谢

2 个答案:

答案 0 :(得分:1)

dfdf1的列不同。

顺便说一下,与update相对,以下内容也适用:

df[df == 0.05] = np.random.choice([0., 0.05], size=df.shape)

答案 1 :(得分:1)

不确定您的问题出在哪里,因为您没有提供有关如何构建DataFrame的详细信息。无论如何,您实际上不必为此使用DataFrames:NumPy当然可以执行您需要做的事情。这是您可以使用的示例代码:

import numpy as np

# Randomly create the initial arrays, just to prove the code is OK
df1 = np.random.choice([0.0, 0.05], size=(17520,1000))
df2 = np.random.choice([0.0, 0.05], size=(17520,1000))

# Modify them
w1 = np.where(df1 == 0.05)
w2 = np.where(df2 == 0.05)
df1[w1] = np.random.choice([0.0, 0.05], size=len(w1[0]))
df2[w2] = np.random.choice([0.0, 0.05], size=len(w2[0]))

df_new = df1 - df2