获取给定列中使用的唯一字符列表

问题描述 投票:0回答:5

我有一个

csv
文件,我用
pandas
处理。该列称为
raw_value
我想检索此列中的唯一字符。

x=df.manual_raw_value.unique()

允许检索唯一行。但是,我希望检索此列中的所有字符。 这是: 字母表= 6 , 3 5 1 8 V O T R E A 2 。 é è / :

   raw_value
    6,35
    11,68
    VOTRE
    AVEL AR VRO
    2292
    questions.
    nb
    les
    937,99
    à
    et
    TTC
    1
    620
    Echéance
    vos
    ROB21
    Pièce
    AGRIAL
    désignation
    des
    taux
    13s
    2
    par
    le
    mois,
    32
    21/07/2016
    FR
    au
    0
    téléphonique
    BROYEUR
    et
    ST
    TVA
    de
    des
    ECHEANCIER
    à
    ne
    lieu
    481,67
    N°0016
    de
    ministère
    de
    20/11/2015
    Si
    vous
    59
    cas
    EUR
    3.19
    2
    contrôle
    assurances
    BAS
    et
    4423873
    renseignements
    6104219
    C9DECOMPTEDIVERS
    6635
    DE
    10825

EDIT_1

所有三个解决方案都完美运行。 我选了第二个

set(df.raw_value.apply(list).sum())

Hwever 它返回一些编码的字符。它与编码有关吗? 如何解码和显示真正的 char 。这是它打印的内容

{' ',
 '!',
 '"',
 '%',
 '&',
 "'",
 '(',
 ')',
 '*',
 '+',
 ',',
 '-',
 '.',
 '/',
 '0',
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 ':',
 '=',
 '>',
 '?',
 '@',
 '_',
 'a',
 'b',
 'c',
 'd',
 'e',
 'f',
 'g',
 'h',
 'i',
 'j',
 'k',
 'l',
 'm',
 'n',
 'o',
 'p',
 'q',
 'r',
 's',
 't',
 'u',
 'v',
 'w',
 'x',
 'y',
 'z',
 '\x82',
 '\x87',
 '\x94',
 '\xa1',
 '\xa7',
 '\xaa',
 '\xab',
 '\xac',
 '\xae',
 '\xaf',
 '\xb0',
 '\xb4',
 '\xb9',
 '\xbb',
 '\xc2',
 '\xc3',
 '\xe2'}
python pandas dataframe
5个回答
7
投票

您可以先将原始值转换为字符串列表,然后堆栈到 char df 并获取唯一元素。

df.applymap(list).raw_value.apply(pd.Series).stack().unique()
Out[620]: array(['6', ',', '3', ..., 'ô', 'D', 'M'], dtype=object)

您也可以通过将原始值转换为列表、连接列表然后获取列表的集合来做到这一点。

set(df.raw_value.apply(list).sum())

更简单的方法是直接将原始值连接到字符串,然后在其上应用集合,因为字符串本质上是一个列表。

set(df.raw_value.sum())

注意,第一种方法将在结果中包含 nan,而第二种和第三种方法将排除 nan。


3
投票

我知道这个问题已经有人回答了,但这是另一种回答方式:

x = set(list(' '.join(manual_raw_value.values)))

0
投票

还有一个办法:

from functools  import reduce

reduce(lambda a, b: set((*a,*b)), df['raw_value'].apply(np.array))

0
投票

如果您的数据框很大,但您知道列中出现了一些字符,您可以使用

strip()
删除这些字符来加快速度。此外,您可以将列转换为字符串并添加字符串,而不是添加列表。例如,以下代码假定您知道列中出现的数字 0123456789。

set(list(df['raw_value'].str.strip('01234566789').sum()))

0
投票

我认为将原始值转换为列表并将它们连接起来不是一个好主意。它需要相当大的内存和时间来处理。声明集合并更新它会更快:

unique_characters = set()
df.raw_value.apply(lambda x: unique_characters.update(x))
© www.soinside.com 2019 - 2024. All rights reserved.