V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
badacook
V2EX  ›  Python

pandas 行筛选

  •  
  •   badacook · 2021-03-29 21:03:34 +08:00 · 2072 次点击
    这是一个创建于 1337 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教一下大家
    在 DataFrame 进行行筛选时 一般使用 DataFrame.loc 方法,指定列标签,或者通过列的表达式传入一组 boolean array
    如果要 DataFrame 行列比较多,该如何筛选包含指定 字符串的行呢,是通过 pandas.DataFrame.iterrows()对行数据进行历遍匹配
    还是有什么其他的好方法没? 以下简单实例 筛选包含 字符'a'的行
    df = pd.DataFrame([["x(a)","(ab)","c","d"],["m","2b","2x(3)y","d"],["a","n","c","4(n)e"]])

    再就是 不知有没有 pandas 定位检索、增删改查的 cookbook 类的资料可以参考,
    还有一个小问题 就是将 DataFrame.applymap(str) 处理时 遇到数值型,结尾含 0 的,直接给去掉了,有没有办法转化是保留
    9 条回复    2021-03-30 10:08:35 +08:00
    imn1
        1
    imn1  
       2021-03-29 22:04:59 +08:00
    搜“pandas 像写 sql”能找到一篇文章

    类型问题,处理前 astype 转换一下
    badacook
        2
    badacook  
    OP
       2021-03-29 22:22:30 +08:00
    @imn1
    谢谢大神的提点 那篇文章有搜到过 看过一部分
    结合这个 问题我想起来了 apply()相关函数 包含多列处理,返回的是 DataFrame,
    可以将 DataFrame.T 对所有行变换成列,返回相关列也就是本身的行,只是需要自定义判断函数
    之前看到了 DataFrame.query 函数 也是返回 DataFrame 列,就是其中的 boolean expression 感觉到不到效果
    再次感谢 大神的 astype 指点。
    wuwukai007
        3
    wuwukai007  
       2021-03-29 22:25:25 +08:00
    df.loc[(df == 'a').any()]
    badacook
        4
    badacook  
    OP
       2021-03-29 22:36:26 +08:00
    @wuwukai007 试过了 完全不对啊
    v2sir
        5
    v2sir  
       2021-03-29 23:03:08 +08:00
    要不你先 df.T 一下 ? 逃~
    wanv1171
        6
    wanv1171  
       2021-03-30 04:14:13 +08:00
    wanv1171
        7
    wanv1171  
       2021-03-30 04:17:50 +08:00   ❤️ 1
    没注意是筛选行,那应该这样 df[df.apply(lambda r: r.str.contains('b', case=False).any(), axis=1)]

    https://stackoverflow.com/questions/38980514/most-concise-way-to-select-rows-where-any-column-contains-a-string-in-pandas-dat/43018248
    badacook
        8
    badacook  
    OP
       2021-03-30 07:07:15 +08:00
    @wanv1171 非常感谢,Series.str.contains(),与 apply lambda 这种方式 这几天都一直在用,就是这几种结合 any 函数没组合使用过,真香啊,感谢感谢,致敬
    HelloViper
        9
    HelloViper  
       2021-03-30 10:08:35 +08:00
    series.str.contains 呀,你连续问的问题都是 str 列的内置方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:57 · PVG 19:57 · LAX 03:57 · JFK 06:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.