在pandas中,一个如何只洗牌一列数据?
我有一个带有生产数据的数据框,我想将其加载到dev上进行测试。但是,数据包含个人可识别的信息,因此我希望对这些列进行无序排列。
列:firstname lastname birthdate ssn otherdata
如果原始数据帧是由read_csv创建的,并且我希望将数据转换为第二个数据帧以供SQL加载,但洗牌名、姓氏和SSN,那么我应该能够这样做:

if devprod == 'prod':
    #do not shuffle data
    df1['HS_FIRST_NAME'] = df[4]
    df1['HS_LAST_NAME'] = df[6]
    df1['HS_SSN'] = df[8]
else:
    df1['HS_FIRST_NAME'] = np.random.shuffle(df[4])
    df1['HS_LAST_NAME'] = np.random.shuffle(df[6])
    df1['HS_SSN'] = np.random.shuffle(df[8])

但是,当我试图得到以下错误:
试图在数据帧切片的副本上设置值

最佳答案

即时错误是使用数据帧时使用不可取方法的症状。
np.random.shuffle工作到位并返回None,因此分配给np.random.shuffle的输出将不起作用。事实上,很少需要就地操作,而且通常不会产生实质性的好处。
例如,在这里,您可以使用np.random.permutation并通过pd.Series.values而不是系列使用numpy数组:

if devprod == 'prod':
    #do not shuffle data
    df1['HS_FIRST_NAME'] = df[4]
    df1['HS_LAST_NAME'] = df[6]
    df1['HS_SSN'] = df[8]
else:
    df1['HS_FIRST_NAME'] = np.random.permutation(df[4].values)
    df1['HS_LAST_NAME'] = np.random.permutation(df[6].values)
    df1['HS_SSN'] = np.random.permutation(df[8].values)

关于python - 随机排列 Pandas 数据框中的一列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54009400/

10-11 19:50
查看更多