python - 如果数据框中的十进制值适合一个范围,则用不同的字符串替换它们

标签 python pandas loops replace range

如果值在特定范围内,我如何替换数据框中的值? 即我想替换所有值 0<i<=0.01三颗星,0.01<i<=0.05有两颗星和0.05<i<=0.1一颗星。

这是我的数据框:

C=pd.DataFrame({'A':[0.0001,0.01,0.025,0.05,0.075,0.1], 'B':[0.0001,0.01,0.025,0.05,0.075,0.1]})

首先我尝试使用以下方法替换值:

C[((C.loc[:,:]<=0.01) & (C.loc[:,:]>0))]='***'
C[((C.loc[:,:]<=0.05) & (C.loc[:,:]>0.01))]='**'
C[((C.loc[:,:]<=0.1) & (C.loc[:,:]>0.05))]='*'

但是这个操作只能执行一次。一旦数据框中有字符串,<=运算符不再工作并产生此错误

'<=' not supported between instances of 'str' and 'float'

所以我想我可以创建一个 for 循环,但是我在为范围建模时遇到了问题,因为 range()只接受整数作为输入值。然后我尝试用 np.arange() 修复它.因为我不知道步长,所以我不能将它作为输入参数放在 np.arange() 中。 ,但是用非常小的步长进行试验,有一个奇怪的行为,即我做了:

for index,rows in C.iterrows():
    for i in rows:
        if  i in np.arange(0,0.011, 0.00001):
            C=C.replace(i,'***')
        elif i in np.arange(0.05,0.1, 0.000001) :
            C=C.replace(i,'**')
C

输出为:

    A       B
0   ***     ***
1   ***     ***
2   0.025   0.025
3   **      **
4   0.075   0.075
5   0.1     0.1

所以它适用于整个 if 语句,但仅适用于受 elif 语句影响的第一个值。请帮忙,我怎样才能做到这一点?

最佳答案

按照@QuangHoang 的建议将数据帧转换为数字,发布这个你可以尝试使用 np.select() :

c1=C.le(.01)
c2=C.gt(.01)&C.le(.05)
c3=C.gt(.05)&C.le(.1)
s=np.select([c1,c2,c3],['***','**','*'])

C[:]=s
print(C)

     A    B
0  ***  ***
1  ***  ***
2   **   **
3   **   **
4    *    *
5    *    *

关于python - 如果数据框中的十进制值适合一个范围,则用不同的字符串替换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57186824/

相关文章:

python - 如何提高 python 循环速度?

ios - 将 1 个词典中的项目添加到另一个词典 -Swift iOS9

Python 迭代器 : reset iterator?

bash - 在 shell 命令中使用循环时出现错误消息

Python for .NET : System. BadImageFormatException 嵌入时

python - Django - 在不访问数据库的情况下访问外键值

Python:如何选择包含一年中特定月份的列?

python - 确保工作进程总是在 zeroMQ 中终止

python - 如何从python中的.tar存档中提取特定文件?

python - pandas 使用用户定义的时间间隔重新采样