Запутайте / Маска / персональные данные Скремблирования

Существует два разных направления, связанных с Вопросом:

1) Как сделать строчные имена столбцов в DataFrame.

Вот как ты будешь делать.

>>> df.columns = df.columns.str.lower()

>>> df
  my_col   <-- Column name changed to lowercase
0    ONE
1    Two
2  Three
3   Four

2) Как уменьшить значения столбцов в кадре данных. Таким образом, для перевода имен столбцов в нижний регистр вам не нужен цикл. Просто сделайте, как показано ниже ..

>>> df.MY_COL.str.lower()
0      one
1      two
2    three
3     four
Name: MY_COL, dtype: object

ИЛИ

>>> df['MY_COL'].str.lower()
0      one
1      two
2    three
3     four
Name: MY_COL, dtype: object

Пример DataFrame:

>>> df
  MY_COL
0    ONE
1    Two
2  Three
3   Four

Однако запрос о [], Часть в квадратных скобках называется списком Понимание Понимания списков обеспечивают краткий способ создания списков, см. Doc Listcomp

10
задан Milen A. Radev 30 April 2009 в 15:14
поделиться

6 ответов

Я использую generatedata. Это - сценарий PHP с открытым исходным кодом, который может генерировать все виды фиктивных данных.

3
ответ дан 4 December 2019 в 04:02
поделиться

Откровенно говоря, я не уверен, почему это необходимо. Ваши dev/test среды должны быть частными, позади Вашего брандмауэра, и не доступными от сети.

Вашим разработчикам нужно доверять, и у Вас есть обращение в суд против них, если им не удается соответствовать Вашему доверию.

Я думаю, что реальный вопрос должен быть, "Я должен скремблировать данные?", и ответ является (в моем уме) 'нет'.

Если Вы отправляете его удаленный по некоторым причинам, или у Вас должны быть свои доступные для сети среды, или если бы Вы параноики, я реализовал бы случайный переключатель. Вместо того, чтобы создавать временную таблицу, выполните переключатели между каждым местоположением и случайной строкой в таблице, подкачав одну часть данных за один раз.

Конечным результатом будет таблица со всем одинаковым данные, но с ним случайным образом реорганизованный. Это должно также быть быстрее, чем Ваша временная таблица, я верю.

Должно быть достаточно просто реализовать Перестановку Фишера-Йетса в SQL... или по крайней мере в консольном приложении, которое читает дб и пишет в цель.

Редактирование (2): неподготовленный ответ в T-SQL:

объявите, что @name varchar (50) устанавливают @name = (ВЫБЕРИТЕ lastName от человека где personID = (случайный идентификационный номер), человек Обновления установил lastname = @name ГДЕ personID = (идентификатор человека текущей строки)

Перенесите это в цикл и следуйте инструкциям Фишера-Йетса для изменения случайных ограничений значения, и Вы будете установлены.

-1
ответ дан 4 December 2019 в 04:02
поделиться

Почему не только используют своего рода Случайный Генератор Имени?

0
ответ дан 4 December 2019 в 04:02
поделиться

При выполнении чего-то как этот я обычно пишу небольшую программу, что первые загрузки много имен и фамилий в двух массивах, и затем просто обновляют базу данных с помощью случайного имени/фамилии от массивов. Это работает действительно быстро даже на очень большие наборы данных (200.000 + записи)

1
ответ дан 4 December 2019 в 04:02
поделиться

Очень простое решение было бы к ROT13 текстом.

Лучший вопрос может состоять в том, почему Вы чувствуете потребность скремблировать данные? Если у Вас есть ключ шифрования, Вы могли бы также рассмотреть выполнение текста через DES или AES или подобный. Thos имел бы потенциальные проблемы производительности, как бы то ни было.

1
ответ дан 4 December 2019 в 04:02
поделиться

Вместо этого используйте временную таблицу, и запрос будет очень быстрым. Я только что побежал по 60К строк за 4 секунды. Я буду использовать этот в будущем.

DECLARE TABLE #Names 
(Id int IDENTITY(1,1),[Name] varchar(100))

/ * Зашифруйте фамилии (выберите другую фамилию случайным образом) * /

INSERT #Names
  SELECT LastName 
  FROM Customer 
  ORDER BY NEWID();
WITH [Customer ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS ROWID, LastName FROM Customer)

UPDATE [Customer ORDERED BY ROWID] 

SET LastName=(SELECT [Name] FROM #Names WHERE ROWID=Id)

DROP TABLE #Names
0
ответ дан 4 December 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: