Заменить строки из столбца уникальными случайными строками - PullRequest
2 голосов
/ 13 марта 2020

У меня есть CSV, который имеет несколько столбцов, один из этих столбцов состоит из строк.

Я начинаю с того, что просто читаю файл csv, а затем просто использую два столбца

df = pd.read_csv("MyDATA_otherstring.csv", usecols=["describe_file", "data_numbers"])

Это вывод

    describe_file   data_numbers
0   This is the start of the story  7309.0
1   This is the start of the story  35.0
2   This is the start of the story  302.0
3   Difficult part  7508.5
4   Difficult part  363.0

Примерно в 10 тыс. Строк имеется около 150 уникальных струн. Эти строки появляются в файле несколько раз.

Моя цель Фильтровать по первому примеру строки «Это начало истории» и заменить его случайной строкой.

Я хочу переберите все строки в этом столбце и замените их уникальными строками

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

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Это ваш пример:

import pandas as pd
import numpy as np
from string import ascii_lowercase

df = pd.DataFrame([['This is the start of the story']*3 + ['Difficult part']*2, 
    np.random.rand(5)], index=['describe_file', 'data_numbers']).T
                    describe_file data_numbers
0  This is the start of the story     0.825913
1  This is the start of the story     0.704422
2  This is the start of the story      0.91563
3                  Difficult part     0.192693
4                  Difficult part     0.795088

Вот как вы можете это сделать:

df.describe_file = df.join(df.groupby('describe_file')['describe_file'].apply(lambda x:
    ''.join(np.random.choice(list(ascii_lowercase), 10))), \
    on='describe_file', rsuffix='_NEW')['describe_file_NEW']

Результат:

  describe_file data_numbers
0    skgfdrsktw     0.204907
1    skgfdrsktw     0.399947
2    skgfdrsktw     0.990196
3    rziuoslpqn     0.930852
4    rziuoslpqn     0.210122
0 голосов
/ 13 марта 2020

Предыдущий ответ @Nicolas Gervais - это хорошо, но, прочитав несколько раз вопрос, я понимаю, что вопрос состоит в том, чтобы заменить «Это часть истории» случайной строкой, а оставшуюся «Трудную часть» оставить. как есть. Следующая команда, включая оператор .replace(), делает это.

df['describe_file'].apply(lambda x: x.replace('This is the start of the story', ''.join(np.random.choice(list(ascii_lowercase), 10)))) 
0        glhrtqwlnl
1        qxrklnxhoj
2        kszgtysptj
3    Difficult part
4    Difficult part
Name: describe_file, dtype: object
...