在 Python DataFrame 中将 NaN 响应更改为零的风险

Risks re changing NaN responses to zero in Python DataFrame

我有一个很大的调查数据集要清理(300 列,30000 行)并且列是混合的。我将 Python 与 pandas 和 numpy 一起使用。我非常处于使用 Python 的学习轮阶段。

我正在将 Y/N 的答案更改为 1 或 0。但是,对于李克特量表列,我担心做同样的事情可能会有风险。有没有人认为暂时将这些数据保留为 NaN 是否更可取?性别是相同的——男性有一个单独的列,女性有一个单独的列,两者都用 1 表示是,用 NaN 表示否。

我打算将 Python 用于数据 analysis/charting(将导入 matplotlib 和 seaborn)。由于这对我来说是新的,我猜测我现在所做的更改可能会在以后产生意想不到的后果!

如果您能提供任何指导,我们将不胜感激。

提前致谢。

如果 0 没有任何意义,可以用一个值填充 NA(为方便起见,0)。这完全取决于您的数据。也就是说,300 x 30k 并没有那么大。将其保存为 CSV 文件,然后在 IPython Notebook 中进行实验,Pandas 可能会在一秒钟内读取它,所以如果你搞砸了,只需重新加载。

这里有一小段代码,可以将任何多列问题集压缩成具有某个数字的单列:

df = pd.DataFrame({
    1: {'agree': 1}, 
    2: {'disagree': 1}, 
    3: {'whatevs': 1}, 
    4: {'whatevs': 1}}).transpose()
df

question_sets = {
    'set_1': ['disagree', 'whatevs', 'agree'], # define these lists from 1 to whatever
}

for setname, setcols in question_sets.items():
    # plug the NaNs with 0
    df[setcols].fillna(0)

    # scale each column with 0 or 1 in the question set with an ascending value
    for val, col in enumerate(setcols, start=1):
        df[col] *= val

    # create new column by summing all the question set columns
    df[setname] = df[question_set_columns].sum(axis=1)

    # delete all the old columns
    df.drop(setcols, inplace=True, axis=1) 

df