Skip to main content
 首页 » 编程设计

python之将数据框列中的字符串映射到数值

2025年05月04日16soundcode

大家好,

我需要将字符串中的字符更改为 pandas 系列的数值,如下所示:

df = ['FF-FFF--FF+F-FFF', 
     'F+-++--F+FF+-++-', 
     'F++-FF-F-+F++-FF', 
     'F+++++++++++++++', 
     'F-F+-F-F+-F-F+-F', 
     'F--F-+FFF+-FFF+-', 
     'F+F-+F+F-+F+F-+F', 
     'F--F--+-+++--F--', 
     'F+FF--+FF--+FF--', 
     'F-F+-+-F+-+-F+-+', 
     'F++++-++++-++++-', 
     'F+---++---++---+', 
     'F+-+FF+-+FF+-+FF', 
     'F+-FF-+-FF---+-F', 
     'FF-+F+F-+F+F-+F+', 
     'F+F+--+F+--+F+--', 
     'FF+F-FFF---F+F-F', 
     'FF+-FF-+---F+-FF', 
     'F++--+++--+++--+'] 
 
num_dict = {'+':1, '-':2, 'F':3} 
 
transformed_df = [3323332233132333, 
                  3121122313312112, 
                  3112332321311233, 
                  3111111111111111, 
                  3231232312323123, 
                  3223213331233312, 
                  3132131321313213, 
                  3223221211122322, 
                  3133221332213322, 
                  3231212312123121, 
                  3111121111211112, 
                  3122211222112221, 
                  3121331213312133, 
                  3123321233222123, 
                  3321313213132131, 
                  3131221312213122, 
                  3313233322231323, 
                  3312332122231233, 
                  3112211122111221] 

我试过了 mapping数据框到字典,但只考虑整个字符串而不是每个字符。然后我尝试将字符串映射到元组,然后再映射到字典,但这也不起作用。

请您参考如下方法:

你可以通过 dict.get() 来做到这一点:

s = pd.Series(df) 
s.apply(lambda x: ''.join([str(num_dict.get(i)) for i in list(x)])) 

0     3323332233132333 
1     3121122313312112 
2     3112332321311233 
3     3111111111111111 
4     3231232312323123 
5     3223213331233312 
6     3132131321313213 
7     3223221211122322 
8     3133221332213322 
9     3231212312123121 
10    3111121111211112 
11    3122211222112221 
12    3121331213312133 
13    3123321233222123 
14    3321313213132131 
15    3131221312213122 
16    3313233322231323 
17    3312332122231233 
18    3112211122111221 
dtype: object 

注意:如果您希望数字作为数字而不是字符串,您可以稍后执行 s=pd.to_numeric(s,errors='coerce')