主题:Python爱好者俱乐部
正序浏览
主题图片汇总
主题内检索
浏览:17412 回帖:522
游客没有回帖权限
资深泡菜
泡网分: 29.172
主题: 320
帖子: 14180
注册: 2008年6月
大信 发表于 2022-5-9 12:20
在使用pandas的Dataframe的时候遇到一个问题,报错信息显示“页面文件太小,无法操作”,以及out of memory

我编写的python程序中使用了多线程,dataframe等技术。通过任务管理器观察程序启动运行时的内存占用情况,当多进程启动后内存占用逐步提高,在接近9GB的时候,程序就发生崩溃。而实际配置的内存是16GB 。感觉这个问题似乎跟python的内存配置有关?

请路过的各位python专家帮忙看看报错信息,分析原因帮忙解决。 谢谢!

@nahcooo @yejun @benniewang @闲聊状态


看着就是内存不足的原因,你的9GB占用是从哪里得到的?资源管理器刷新要时间,对于瞬间的高占用可能无法及时显示。

你可以试着每次大量开内存前先在python里主动询问一下内存剩余,并且记录日志。这样应该比资源管理器准确。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 18.13
主题: 11
帖子: 15051
注册: 2012年6月
大信 发表于 2022-5-9 14:08
的确就是内存不足的原因。
我把程序放到服务器上运行,那里有256GB内存,运行完全没有问题。

Windows 上资源管理器中对使用内存的显示滞后,以至于给我错觉9GB就崩溃,可能那时候实际使用的内存已经达到硬件极限,只是没有显示出来而已。

谢谢!


不谢啊 也没帮上什么忙
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
闲聊状态 发表于 2022-5-9 13:06
看提示就是 内存不足

找个32G的机器试试?
是不是有复制DataFrame 的操作?9*2 >16 ?


的确就是内存不足的原因。
我把程序放到服务器上运行,那里有256GB内存,运行完全没有问题。

Windows 上资源管理器中对使用内存的显示滞后,以至于给我错觉9GB就崩溃,可能那时候实际使用的内存已经达到硬件极限,只是没有显示出来而已。

谢谢!
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 18.13
主题: 11
帖子: 15051
注册: 2012年6月
大信 发表于 2022-5-9 12:20
在使用pandas的Dataframe的时候遇到一个问题,报错信息显示“页面文件太小,无法操作”,以及out of memory

我编写的python程序中使用了多线程,dataframe等技术。通过任务管理器观察程序启动运行时的内存占用情况,当多进程启动后内存占用逐步提高,在接近9GB的时候,程序就发生崩溃。而实际配置的内存是16GB 。感觉这个问题似乎跟python的内存配置有关?

请路过的各位python专家帮忙看看报错信息,分析原因帮忙解决。 谢谢!

@nahcooo @yejun @benniewang @闲聊状态


看提示就是 内存不足

找个32G的机器试试?
是不是有复制DataFrame 的操作?9*2 >16 ?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
在使用pandas的Dataframe的时候遇到一个问题,报错信息显示“页面文件太小,无法操作”,以及out of memory

我编写的python程序中使用了多线程,dataframe等技术。通过任务管理器观察程序启动运行时的内存占用情况,当多进程启动后内存占用逐步提高,在接近9GB的时候,程序就发生崩溃。而实际配置的内存是16GB 。感觉这个问题似乎跟python的内存配置有关?

请路过的各位python专家帮忙看看报错信息,分析原因帮忙解决。 谢谢!

@nahcooo @yejun @benniewang @闲聊状态
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 29.172
主题: 320
帖子: 14180
注册: 2008年6月
手倦抛书 发表于 2022-3-6 09:33
学了一个月爬虫,一般网页没啥问题了,但碰上全js网站就抓瞎了,逆向js太难了,看见那密密麻麻的js代码就头大


那种不需要去解析js,应该直接用webdriver打开页面后再去访问页面上的元素
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 4.331
主题: 61
帖子: 3047
注册: 2014年8月
午夜半杯茶 发表于 2022-3-6 14:21
从没学过编程的学Python难吗,只学关于电子表格处理的部分。
为电子表格处理没必要学python,原因是python并不能提供更高级的处理方式,还不如多学学excel自带的函数有用,比如:xlookup(),dget()
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
发现一个很有意思的project,可以直接在浏览器里面执行python。连numpy这样的库都支持。

https://github_com/pyscript/pyscript
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 18.13
主题: 11
帖子: 15051
注册: 2012年6月
午夜半杯茶 发表于 2022-3-6 14:21
从没学过编程的学Python难吗,只学关于电子表格处理的部分。


我觉得这东西做电子表格的话,主要就是做“数据透视表”

如果只是干这个 用accress里写SQL也可以啊 而且SQL比python还简略 高效

我对上下取值补空 是很反感 有就是有 没有就是垃圾数据。。。 本帖最后由 闲聊状态 于 2022-3-30 09:03 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
午夜半杯茶 发表于 2022-3-6 14:21
从没学过编程的学Python难吗,只学关于电子表格处理的部分。


如果功能不复杂,可能用excel处理更适合。
如果有比较复杂的处理逻辑或者重度数据的清洗整理,Python+Pandas+Numpy是不错的组合,也非常方便最终生成excel表格

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 14.218
主题: 55
帖子: 2794
注册: 2009年6月
yejun 发表于 2022-03-06 10:57
用selenium。

本帖最后由 yejun 于 2022-3-6 11:07 编辑

嗯,太慢了,爬虫学点就行了,量化才是王道
发布自 安卓客户端
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 10.749
主题: 198
帖子: 5582
注册: 2019年12月
从没学过编程的学Python难吗,只学关于电子表格处理的部分。
发布自 色影无忌小程序
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 22.052
主题: 6
帖子: 3262
注册: 2006年8月
好帖子,标记收藏。我不是相关专业的,看了入门的书,觉得这个语言有点太灵活了,有兴趣啊。
发布自 安卓客户端
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
手倦抛书 发表于 2022-3-6 09:33
学了一个月爬虫,一般网页没啥问题了,但碰上全js网站就抓瞎了,逆向js太难了,看见那密密麻麻的js代码就头大


用selenium。

https://selenium-python-zh.readthedocs.io/en/latest/ 本帖最后由 yejun 于 2022-3-6 11:07 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 14.218
主题: 55
帖子: 2794
注册: 2009年6月
学了一个月爬虫,一般网页没啥问题了,但碰上全js网站就抓瞎了,逆向js太难了,看见那密密麻麻的js代码就头大
发布自 安卓客户端
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
大信 发表于 2021-9-26 10:42
不是我坚持用for循环,我以为此例只能用
self.dfx.loc[index,....]
而不能用
self.dfx.loc[条件表达式,.....]

当然你用的 index 其实也是一个条件表达式。这种写法我是头一次见到,学习了!
另外纠正一个小小错误,index赋值应该为: index = self.dfx["rate"]


其实那个不等试已经是一个布尔序列了。你打印一下index就明白了。
我写python一般会在VSCode里面开一个jupyter窗口边试边写,所有变量一目了然。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 29.505
主题: 17
帖子: 655
注册: 2001年8月
写爬虫 做网站 呵呵
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
yejun 发表于 2021-9-24 10:27
那个警告就是将来的版本不支持的,我的python版本就直接出错了。
和你说了很多次了不要用for循环,效率低几十倍呢,因为pandas内部的循环是c写的。
这样写吧
index = row["rate"]< 70:
self.dfx.loc[index, "type"] = 3
self.dfx.loc[index,"score2"] = self.dfx["score1"]


不是我坚持用for循环,我以为此例只能用
self.dfx.loc[index,....]
而不能用
self.dfx.loc[条件表达式,.....]

当然你用的 index 其实也是一个条件表达式。这种写法我是头一次见到,学习了!
另外纠正一个小小错误,index赋值应该为: index = self.dfx["rate"]<70

本帖最后由 大信 于 2021-9-26 10:43 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
手倦抛书 发表于 2021-9-24 20:05
最近学习pandas,兼职给财务和业务部门做码农,快50的人了,废寝忘食,乐不思蜀,哈哈


活到老,学到老

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 14.218
主题: 55
帖子: 2794
注册: 2009年6月
最近学习pandas,兼职给财务和业务部门做码农,快50的人了,废寝忘食,乐不思蜀,哈哈
发布自 安卓客户端
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
大信 发表于 2021-9-24 10:18
非常感谢,解释得比较清楚了。我后来改为一次赋值一列,就没有问题。

针对这个问题,我发现更改数据的时候不用loc加条件赋值,而是采用dfx.loc[index,.....]的方式,也可以多列同时赋值。例如下面这样修改,就不会出现Nan值:

        for index,row in self.dfx.iterrows():
            if row["rate"]< 70:
                self.dfx.loc[index, ["type", "score2"]] = [3, self.dfx["score1"]]

虽然赋值成功,但是仍然会出现告警:

C:\Users\test\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\fromnumeric.py:3162: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return asarray(a).ndim

我想问的是,这个告警如果不管它,会不会有什么隐患?

最后,我再改为分别赋值,就彻底没这个问题了:

        for index,row in self.dfx.iterrows():


那个警告就是将来的版本不支持的,我的python版本就直接出错了。
和你说了很多次了不要用for循环,效率低几十倍呢,因为pandas内部的循环是c写的。
这样写吧
index = row["rate"]< 70:
self.dfx.loc[index, "type"] = 3
self.dfx.loc[index,"score2"] = self.dfx["score1"] 本帖最后由 yejun 于 2021-9-24 10:31 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
yejun 发表于 2021-9-23 22:39
因为左边是一个df,赋值的时候是右边先转换成一个二维数组再赋值,而不是你想要的左边转换成两个列再赋值。
这个情况只能一列一列赋值,我也想不出什么好的办法。那个错误也是因为两个不同类型长度的列被放在一起了。


非常感谢,解释得比较清楚了。我后来改为一次赋值一列,就没有问题。

针对这个问题,我发现更改数据的时候不用loc加条件赋值,而是采用dfx.loc[index,.....]的方式,也可以多列同时赋值。例如下面这样修改,就不会出现Nan值:

        for index,row in self.dfx.iterrows():
            if row["rate"]< 70:
                self.dfx.loc[index, ["type", "score2"]] = [3, self.dfx["score1"]]

虽然赋值成功,但是仍然会出现告警:

C:\Users\test\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\fromnumeric.py:3162: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return asarray(a).ndim

我想问的是,这个告警如果不管它,会不会有什么隐患?

最后,我再改为分别赋值,就彻底没这个问题了:

        for index,row in self.dfx.iterrows():
            if row["rate"]< 70:
                self.dfx.loc[index, "type"] = 3
                self.dfx.loc[index,"score2"] = row["score1"]
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
大信 发表于 2021-9-23 15:11
再请教一个dataframe的问题。代码详见附件。
我用loc方法给df中满足条件的数据赋值,为何不满足条件的数据,变成了Nan ?

下面是运行结果:

C:\Users\test\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\fromnumeric.py:3162: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return asarray(a).ndim

--- 初始化数据后的结果 -----
Name Name1 type: 0 score1: 900 score2: -1
Name Name2 type: 0 score1: 900 score2: -1
Name Name3 type: 0 score1: 900 score2: -1
Name Name4 type: 0 score1: 900 score2: -1
Name Name5 type: 0 score1: 1000 score2: -1
Name Name6 type: 0 score1: 1000 score2: -1
Name Name7 type: 0 score1: 1000 score2: -1
--- loc赋值后的结果 -----
Name Name1 type: 3 score1: 900 score2: 900.0
Name Name2 type: 3 score1: 900 score2: 900.0


因为左边是一个df,赋值的时候是右边先转换成一个二维数组再赋值,而不是你想要的左边转换成两个列再赋值。
这个情况只能一列一列赋值,我也想不出什么好的办法。那个错误也是因为两个不同类型长度的列被放在一起了。
本帖最后由 yejun 于 2021-9-23 22:54 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
yejun 发表于 2021-9-4 00:50
index在df里面其实就是一个有特殊名字的列,好像也没排序效果就是打印时候漂亮点。原来的列名就不能用了。

用 reset_index()就可以继续用id了。试试下面这样的,id应该不需要写在里面,因为reset以后会加回来。

xlist = df.loc[df[rate]


再请教一个dataframe的问题。代码详见附件。
我用loc方法给df中满足条件的数据赋值,为何不满足条件的数据,变成了Nan ?

下面是运行结果:

C:\Users\test\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\fromnumeric.py:3162: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return asarray(a).ndim

--- 初始化数据后的结果 -----
Name Name1 type: 0 score1: 900 score2: -1
Name Name2 type: 0 score1: 900 score2: -1
Name Name3 type: 0 score1: 900 score2: -1
Name Name4 type: 0 score1: 900 score2: -1
Name Name5 type: 0 score1: 1000 score2: -1
Name Name6 type: 0 score1: 1000 score2: -1
Name Name7 type: 0 score1: 1000 score2: -1
--- loc赋值后的结果 -----
Name Name1 type: 3 score1: 900 score2: 900.0
Name Name2 type: 3 score1: 900 score2: 900.0
Name Name3 type: 3 score1: 900 score2: 900.0
Name Name4 type: 3 score1: 900 score2: 900.0
Name Name5 type: 0 score1: 1000 score2: nan
Name Name6 type: 0 score1: 1000 score2: nan
Name Name7 type: 0 score1: 1000 score2: nan

Process finished with exit code 0

另外,这个警告信息怎么才能去除掉?
fromnumeric.py:3162: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return asarray(a).ndim

登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
yejun 发表于 2021-9-4 21:59
不用重新赋值啊。
reset_index()[[rate, name, id]].values.tolist()


哦,reset_index后仍然是dataframe,可以再切片,转列表
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
大信 发表于 2021-9-4 19:24
明白了。这个方法实际上用reset_index()去掉索引还原了id列(如果赋值给新的df的话,可以看到只包含id,rate,name三列)。但是仍然没有解决我的问题,在生成列表的时候,我需要将id列安排在rate、name的中间。而这条语句无法调整id的位置,只能在首列。

当然可以去掉索引后赋值给新的df,然后再用tolist生成列表。不过这就过于啰嗦,失去了用一条语句简练完成的目的。

还有一个方法就是在创建索引的时候给参数 drop=False,保留name列就没有上述烦恼了。但是这个感觉又造成数据“冗余”,且不那么pythonic

更正一下:“在创建索引的时候给参数 drop=False,保留id列就没有上述烦恼了”


不用重新赋值啊。
reset_index()[[rate, name, id]].values.tolist()
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
想想心痛 发表于 2021-9-1 08:03
普通人学Python有什么用?

学Python很简单,但要用起来,得学一堆的周边计算机知识。需要耗费大量时间,关键学了也没啥用。


深有同感,但也不完全认同。

的确学以致用是促进学习的重要途径,漫无目的的学就像迷途的羔羊,不知道往哪个方向走。今年6月完成我开发的软件在全系统的推广应用后,也曾一度感到空虚、无所事事。后来发现在算法上有个bug需要改善、又用dataframe替代嵌套列表,这段时间又学了不少东西,感觉唯有在编码中才能体会到快乐。

其实我从去年开始学python的时候,也没有很明确的应用目标,只是用疫情数据完成数据的可视化分析从中找到了乐趣,也锻炼了编程能力。我的感觉一是“目的”要细心去发掘,身边一定有很多潜藏的需求可以让python大展宏图(比如我同事就用python帮业务部门完成了一项定期报告文档的自动生成)。二是python有很多第三方的包,可以不用去“学一堆的周边计算机知识”,只要把这些包拿来应用即可,极大地降低了你对更多更深领域软、硬件编程的探索成本。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
yejun 发表于 2021-9-4 00:50
index在df里面其实就是一个有特殊名字的列,好像也没排序效果就是打印时候漂亮点。原来的列名就不能用了。

用 reset_index()就可以继续用id了。试试下面这样的,id应该不需要写在里面,因为reset以后会加回来。

xlist = df.loc[df[rate]<80,[rate,name ]].reset_index().values.tolist()


明白了。这个方法实际上用reset_index()去掉索引还原了id列(如果赋值给新的df的话,可以看到只包含id,rate,name三列)。但是仍然没有解决我的问题,在生成列表的时候,我需要将id列安排在rate、name的中间。而这条语句无法调整id的位置,只能在首列。

当然可以去掉索引后赋值给新的df,然后再用tolist生成列表。不过这就过于啰嗦,失去了用一条语句简练完成的目的。

还有一个方法就是在创建索引的时候给参数 drop=False,保留name列就没有上述烦恼了。但是这个感觉又造成数据“冗余”,且不那么pythonic

本帖最后由 大信 于 2021-9-4 19:44 编辑
以下内容由 大信 于 2021-9-4 21:04 补充
更正一下:“在创建索引的时候给参数 drop=False,保留id列就没有上述烦恼了”
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.488
主题: 41
帖子: 3446
注册: 2003年7月
大信 发表于 2021-9-4 00:38
谢谢!
我觉得第二种写法更通俗易懂一些。

这两天翻书,百度,还是没有解决一个问题:
------------------

df表的列包括:name,id,rate,type,score
对df建立索引:
df = df.set_index("id")

我想用切片方式,将表中满足条件的数据转换为列表,返给变量xlist。
希望得到的xlist列表是一个嵌套列表,形如:[[30,"A009","设备1],[72,"A002,"设备5"],,,,]

我的语句是:

xlist = df.loc[df[rate


index在df里面其实就是一个有特殊名字的列,好像也没排序效果就是打印时候漂亮点。原来的列名就不能用了。

用 reset_index()就可以继续用id了。试试下面这样的,id应该不需要写在里面,因为reset以后会加回来。

xlist = df.loc[df[rate]<80,[rate,name ]].reset_index().values.tolist() 本帖最后由 yejun 于 2021-9-4 01:02 编辑
以下内容由 yejun 于 2021-9-4 03:42 补充
也可以set_index('id', drop=False)
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.171
主题: 36
帖子: 1357
注册: 2006年12月
yejun 发表于 2021-9-2 23:06
网上找到的方法把百分比转成数字。
df['col'] = df['col'].str.rstrip('%').astype('float') / 100.0

我是在stack overflow网站找到的。

如果按照你的方法也可以写成这样。
df['rate'].apply(lambda x: int(float(x[:-1])) < 10)

不过这样效率肯定没有上面的写法好。


谢谢!
我觉得第二种写法更通俗易懂一些。

这两天翻书,百度,还是没有解决一个问题:
------------------

df表的列包括:name,id,rate,type,score
对df建立索引:
df = df.set_index("id")

我想用切片方式,将表中满足条件的数据转换为列表,返给变量xlist。
希望得到的xlist列表是一个嵌套列表,形如:[[30,"A009","设备1],[72,"A002,"设备5"],,,,]

我的语句是:

xlist = df.loc[df[rate<80,[rate,id,name ]].values.tolist()

当我给id列建立了索引,上面的语句中只要在列表达式中出现id就会报错。
如果没有对id列建立索引,一切运行正常,得到想要的结果。

我的问题是,如何在有index的df中进行切片时,包含有索引的列(以便将包含索引的列连同其他列转为列表)

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
回复主题: Python爱好者俱乐部
功能受限
游客无回复权限,请登录后再试