【问题标题】:Python Pandas: Filter rows based on position letter in stringPython Pandas:根据字符串中的位置字母过滤行
【发布时间】:2021-03-30 22:25:57
【问题描述】:

我对 python 还很陌生,我还在学习 Pandas。我一直在玩耍并尝试使用 Pandas 学习一些我无法使用它的过滤功能使用 Excel ordinaril 完成的东西。

我一直在尝试做的一件事是根据我选择过滤的列中的第二个字母进行过滤。

例如,我有下表:

Name HP Type

Pikachu 10 Electric

Charizard 200 Fire

Squirtle 300 Water

我想创建一个过滤器来查看名称列,如果第二个字母是“h”,那么它会为我提供 charizard 行的数据。

换句话说,它根据所选列中指定的第二个字母逐行过滤数据,在这种情况下,列是“名称”,字母是“h”

我尝试使用 for 循环和索引函数来编写此代码,但在尝试了相当长一段时间后,我无法正确完成它,我想要一些关于我将如何着手解决此问题的反馈.

我的代码如下所示:

import pandas as pd
df = pd.read_excel (r'C:\Users\Name\Desktop\pokemon.xlsx')
for column in (df['Name']):
    if column.index[1]  == 'h':
print (df [['Name', 'HP', 'Type']])

我是新手,所以任何关于如何修复我的代码的提示都将不胜感激。谢谢。

【问题讨论】:

    标签: python python-3.x pandas sorting filter


    【解决方案1】:

    IIUC,然后将 str.containsregex 匹配。

    df[df.Name.str.contains(r'^\wh\w*')]
    

    打印:

            Name   HP  Type
    1  Charizard  200  Fire
    

    【讨论】:

      【解决方案2】:

      使用Series.str[1] 获取2nd letter

      In [1750]: df
      Out[1750]: 
              Name   HP      Type
      0    Pikachu   10  Electric
      1  Charizard  200      Fire
      2   Squirtle  300     Water
      
      In [1751]: def my_func(col, val):
            ...:     return df[df[col].str[1] == val]
            ...: 
      
      In [1752]: my_func('Name', 'h')
      Out[1752]: 
              Name   HP  Type
      1  Charizard  200  Fire
      

      【讨论】:

      • @VedBrahmbhatt 答案对你有用吗?
      • @VedBrahmbhatt 如果答案有帮助,请upvoteaccept 它。
      猜你喜欢
      • 2021-03-18
      • 2022-11-29
      • 2015-05-08
      • 2013-09-16
      • 2016-01-05
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 2014-07-06
      相关资源
      最近更新 更多