繁体   English   中英

将 % 符号附加到数据框列中的 dict 数值

[英]Append % symbol to dict numeric values in a dataframe column

我有一个如下所示的数据框

key, values_list
 1, {'ABC':100}
 2, {'DEF':100}
 3, {'ASE':95,'ABC':5}
 4, {'ABC':55,'ASE':40,'DEF':5}
 5, {'DEF':90,'ABC':5,'ASE':2.5,'XYZ':2.5} 

我想做以下

a) 将 dict 值转换为字符串,并在每个字符串的末尾包含%符号

所以,我尝试了以下

df['values_list'].str.replace(r'[0-9]+', '[0-9]%') # Approach 1
np.where(df['values_list'].str.isdigit(),df['values_list']+'%',df['values_list']) #Approach 2

我希望我的输出如下所示。 您可以看到每个数值都有%符号。

key, values_list
 1, {'ABC':100%}
 2, {'DEF':100%}
 3, {'ASE':95%,'ABC':5%}
 4, {'ABC':55%,'ASE':40%,'DEF':5%}
 5, {'DEF':90%,'ABC':5%,'ASE':2.5%,'XYZ':2.5%} 

为此,您可以使用apply然后将%添加到 dict 的每个值,如下所示:

>>> df['values_list'] = df['values_list'].apply(lambda x: {k: f'{v}%' for k,v in x.items()})
# OR
>>> df['values_list'] = df['values_list'].astype('str').str.replace('([+-]?[0-9]+\.?[0-9]*)', r'\1%', regex=True)
>>> df
   key                                        values_list
0    1                                    {'ABC': '100%'}
1    2                                    {'DEF': '100%'}
2    3                        {'ASE': '95%', 'ABC': '5%'}
3    4          {'ABC': '55%', 'ASE': '40%', 'DEF': '5%'}
4    5  {'DEF': '90%', 'ABC': '5%', 'ASE': '2.5%', 'XY...

colab的基准测试:

import pandas as pd
import numpy as np

newdf = pd.DataFrame(np.repeat(df.values, 100_000, axis=0), columns = ['key', 'values_list'])
print(len(newdf)) #repeat each row 100_000 -> 5*100_000
# 500_000

%timeit newdf['values_list'].apply(lambda x: {k: f'{v}%' for k,v in x.items()})
# 1 loop, best of 5: 651 ms per loop

%timeit newdf['values_list'].astype('str').str.replace('([+-]?[0-9]+\.?[0-9]?)', r'\1%', regex=True) # Approach 1
# 1 loop, best of 5: 3.3 s per loop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM