随机排列熊猫数据框中的一列

时间:2019-01-02 15:59:30

标签: python pandas numpy

如何仅对熊猫中的一列数据进行随机排序?

我有一个包含生产数据的数据框,我想将该数据加载到开发人员进行测试。但是,数据包含个人身份信息,因此我想对这些列进行重新排列。

列:名字姓氏生日SSN其他数据

如果原始数据帧是由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])

但是,当我尝试该操作时,出现以下错误:

试图在DataFrame的切片副本上设置一个值

2 个答案:

答案 0 :(得分:2)

眼前的错误是在处理数据框时使用不可取方法的征兆。

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)

答案 1 :(得分:1)

这似乎也可以做到:

df1['HS_FIRST_NAME'] = df[4].sample(frac=1).values