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

thigvfpy  于 2023-03-28  发布在  其他
关注(0)|答案(5)|浏览(117)

我有一个csv文件,我用pandas处理它。这个列叫做raw_value。我想检索这个列中唯一的字符。

x=df.manual_raw_value.unique()

允许检索唯一的行。但是,我希望检索这列中的整个字符。这是:alphabet= 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

编辑_1

这三种方法都很有效,我选了第二种

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

但是它返回一些编码的字符。它是否与编码有关?如何解码和显示真实的的字符。下面是它打印的内容

{' ',
 '!',
 '"',
 '%',
 '&',
 "'",
 '(',
 ')',
 '*',
 '+',
 ',',
 '-',
 '.',
 '/',
 '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'}
8oomwypt

8oomwypt1#

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

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

您也可以通过将原始值转换为列表,concat列表,然后获取列表的集合来实现这一点。

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

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

set(df.raw_value.sum())

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

afdcj2ne

afdcj2ne2#

我知道这个问题已经得到了回答,但这里有另一种方式来回答它:

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

i7uaboj43#

还有另一种方法:

from functools  import reduce

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

sqyvllje4#

如果你的数据框很大,但有一些你知道的字符出现在你的列中,你可以使用strip()来删除这些字符来加快速度。此外,你可以将你的列转换为字符串并添加字符串,而不是添加列表。例如,下面的代码假设你知道数字0123456789出现在你的列中。

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

8qgya5xd5#

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

unique_characters = set()
df.raw_value.apply(lambda x: unique_characters.update(x))

相关问题