在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/