鱼C论坛

 找回密码
 立即注册
查看: 2503|回复: 2

[已解决]大神帮我看下,为什么最后一句不起作用,要怎么解决?谢谢

[复制链接]
发表于 2022-12-13 10:36:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 futui 于 2022-12-13 10:49 编辑

在阿奇大师帮助下,利用字典,找到了Be列数字对应的字母,结果如下:
data = [[23.3,1,4,8],
[40.18,0,38.41,37.0],
[48.52,1,49.82,2],
[63.9,None,65.3,2],
[34.51,2,36, 1],
[None,3,47.2,46.14]]
df = pd.DataFrame(data = data,columns=['Ae','Be','Ce','De'])

dig_dic = {0: 'Ae', 1: 'Be', 2: 'Ce', 3: 'De', 'nan': ''}
#新增字母列
df['Be'].fillna(' ',inplace=True)
df['zm'] = df['Be'].replace(dig_dic)
df.loc[df['Be'] =='','zm'] = df.loc[df['Be'] =='','De'].replace(dig_dic)

#由于Be列第三行是空的,想用De列对应行的数字代替
#下面是我自己加的一句,意思是:当Be列为空时,就用De列的数字替代,找到对应的字母
#这里应该是找到的2,对应字母为Ce,但这句为什么不起作用?

#df.loc[df['Be'] =='','zm'] = df.loc[df['Be'] =='','De'].replace(dig_dic)   


请大神帮忙看下,或者用什么别的方法达到同样的结果。谢谢!
最佳答案
2022-12-13 15:09:36
本帖最后由 阿奇_o 于 2022-12-13 15:18 编辑

傻孩子,应该是你 loc 的过滤条件,写错了而已,你自己先把空值替换成了 一个空格,过滤时就要过滤一个空格,而不是''这个空字符。。

另外注意,空值 是不能做等值判断的。但空格和空字符属于一般的字符串,是可以进行等值判断的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-13 12:27:05 | 显示全部楼层
本帖最后由 futui 于 2022-12-13 12:28 编辑

df['zm'] = np.where(~df['Be'].isnull(), df['Be'].replace(dig_dic),  df['De'].replace(dig_dic))  

解决!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-12-13 15:09:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2022-12-13 15:18 编辑

傻孩子,应该是你 loc 的过滤条件,写错了而已,你自己先把空值替换成了 一个空格,过滤时就要过滤一个空格,而不是''这个空字符。。

另外注意,空值 是不能做等值判断的。但空格和空字符属于一般的字符串,是可以进行等值判断的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 05:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表