用唯一的随机字符串替换列中的字符串

Posted

技术标签:

【中文标题】用唯一的随机字符串替换列中的字符串【英文标题】:Replace strings from column with unique random strings 【发布时间】:2020-06-25 19:12:19 【问题描述】:

我有一个包含多列的 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

在大约 10k 行中,大约有 150 个唯一字符串。这些字符串在文件中多次出现。

我的目标 按第一个字符串示例“这是故事的开始”进行过滤,并将其替换为随机字符串。

我想遍历该列中的所有字符串并用唯一的字符串替换它们

我查看了随机库和这里提出的一些问题,不幸的是我没有找到任何对我有帮助的东西。

【问题讨论】:

请更具体地说明您所做的研究以及您尝试过的内容。您至少可以以更方便或更实用的格式提供数据。 【参考方案1】:

@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

【讨论】:

【参考方案2】:

这是你的例子:

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

【讨论】:

感谢您的回答,但是我试图找到可以对所有字符串执行此操作的方法。如果我必须处理每个字符串并将其粘贴到代码中。除了在 excel 中执行查找和替换选项之外,我不会更安全 这样吗? (见答案)。即,为整列生成随机字符串? 并且“字符串“这是故事的开始”应该替换为一个强而不是每次都不同 示例。所有“这是故事的开始”都替换为“kkbim”。所有“困难的部分”都用其他字符串替换它们 知道了。希望这是你所期待的(见编辑)

以上是关于用唯一的随机字符串替换列中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

用数字R替换列中的字符

如何替换列中的复杂字符串 (Python)

用php中的随机数字替换字符串中的奇数位置

如何替换 hive 列中的特殊字符?

用随机字母替换字符串中的任意 3 个字母

如何用同一数据框中其他列的实际列值替换一列中的字符串值?