【问题标题】:Searching values in dataframe using re.search使用 re.search 在数据框中搜索值
【发布时间】:2021-11-11 10:41:57
【问题描述】:

我需要遍历很多数据集,搜索特定值并根据搜索结果返回一些值。

数据集存储为字典:

key     type         size       Value
df1     DataFrame    (89,10)    Column names:
df2     DataFrame    (89,10)    Column names:
df3     DataFrame    (89,10)    Column names:

每个数据集看起来像这样,我正在尝试查看 A 列第 1 行中的值是否包含 035 并返回 B 列。

|   A     |    B    |    C    
 02 la 035    nan      nan
   Target      7        5 
   Warning     3        6
 

如果我尝试在其中搜索特定值,则会出现错误

TypeError: first argument must be string or compiled pattern

我试过了:

something = []

for key in df:
    text = df[key]
    if re.search('035', text):
         something.append(text['B'])
            
Something = pd.concat([something],  axis=1)

【问题讨论】:

    标签: python pandas python-re


    【解决方案1】:

    您可以使用.str.contains() : https://pandas.pydata.org/docs/reference/api/pandas.Series.str.contains.html

    df = pd.DataFrame({
        "A":["02 la 035", "Target", "Warning"],
        "B":[0,7,3],
        "C":[0, 5, 6]
    })
    df[df["A"].str.contains("035")] # Returns first row only.
    

    也适用于正则表达式。

    df[df["A"].str.contains("[TW]ar")] # Returns last two rows.
    

    编辑回答更多细节。

    我设置的数据框是这样的:

    要为那些与我使用的最后一个正则表达式模式匹配的行提取列 B,请将最后一行代码修改为:

    df[df["A"].str.contains("[TW]ar")]["B"]
    

    这会返回一个系列。输出:

    编辑 2:我看到你最后想要一个数据框。只需使用:

    df[df["A"].str.contains("[TW]ar")]["B"].to_frame()
    

    【讨论】:

    • 您好,谢谢您的回答,我已经更新了问题。你能看看吗?如果有什么不明白的地方请告诉我。
    • @Dino:对不起。我按要求回答了问题,您的编辑实际上是一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多