Python 在数据帧中洗牌一列

Python 在数据帧中洗牌一列,python,pandas,numpy,Python,Pandas,Numpy,如何在pandas中只洗牌一列数据 我有一个带有生产数据的数据框,我想将其加载到dev上进行测试。但是,数据包含个人可识别的信息,因此我想对这些列进行洗牌 列:FirstName LastName Birthdate SSN OtherData 如果原始数据帧是由read_csv创建的,并且我希望将数据转换为第二个数据帧以进行sql加载,但要将名字、姓氏和SSN混洗,我希望能够做到这一点: if devprod == 'prod': #do not shuffle data df

如何在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])
但是,当我尝试这样做时,会出现以下错误:


试图在数据帧切片的副本上设置值

直接错误是在处理数据帧时使用不适当方法的症状

就地工作并返回
None
,因此分配给
np.random.shuffle
的输出将不起作用。事实上,很少需要就地操作,而且通常不会产生任何实质性好处

例如,在这里,您可以通过而不是系列来使用和使用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)

这似乎也起到了作用:

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

特别是请参阅链接文章。除了解决错误外,使用pandas洗牌的另一种方法是使用
df.sample(frac=1)
。例如,
df1['HS_FIRST_NAME']=df[4]。样本(frac=1)
.df[4]。样本(frac=1)运行时没有错误,但似乎不会乱洗数据。只是好奇。。。在10000行的答案中,他在哪里指出了如何在数据帧中洗牌一列数据答案是它可以像numpy.random.shuffle(df['column\u name'])一样简单。但是,Python将抛出一个警告,因为pandas不希望您更改索引的列。更好的方法是创建一个numpy数组,然后洗牌(myarry=df['column_name'].values/n numpy.random.shuffle(myarray))。如果需要将该数据插入数据帧,只需将其转换回series(df['randomized_column']=pd.series(myarray)