如何仅对熊猫中的一列数据进行随机排序?
我有一个包含生产数据的数据框,我想将该数据加载到开发人员进行测试。但是,数据包含个人身份信息,因此我想对这些列进行重新排列。
列:名字姓氏生日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的切片副本上设置一个值
答案 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