• dataframe应用str.contains+将多列连接成一列


    写在最前面

    原文发布时间:2022-11-15 11:24:56
    原文质量分过低,因此进行完善

    原文

    python - ‘dataframe’ 对象没有属性 ‘str’ 问题

    参考链接:https://www.coder.work/article/3136827

    我正在尝试删除包含某些字符串的行。但是,我收到错误:

    pandas - ‘dataframe’ object has no attribute ‘str’ error.

    我怎样才能解决这个问题?

    最佳答案

    第一个问题应该是重复的列名,所以在选择 colB 之后不要Series , 但是 DataFrame :

    df = pd.DataFrame([['Example: s', 'as', 2], ['dd', 'aaa', 3]], columns=['colB','colB','colC'])
    print (df)
             colB colB  colC
    0  Example: s   as     2
    1          dd  aaa     3
    
    print (df['colB'])
             colB colB
    0  Example: s   as
    1          dd  aaa
    
    #print (df['colB'].str.contains('Example:'))
    #>AttributeError: 'DataFrame' object has no attribute 'str'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    解决方案应该是将列连接在一起:

    print (df['colB'].apply(' '.join, axis=1))
    0    Example: s as
    1           dd aaa
    
    • 1
    • 2
    • 3
    df['colB'] = df.pop('colB').apply(' '.join, axis=1)
    df = df[~df['colB'].str.contains('Example:')] 
    print (df)
       colC    colB
    1     3  dd aaa
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sad,我又报错了

    Python基础-TypeError:takes 2 positional arguments but 3 were given

    因此我需要换种方法将多列合并成一列
    参考链接:https://blog.csdn.net/weixin_42782150/article/details/103668814

    df['ColumnA'] = df[df.columns[1:]].apply(
        lambda x: ','.join(x.dropna()),
        axis=1)   # ”1:“表示合并第一列之后的各列为一列
    
    • 1
    • 2
    • 3

    我的代码:

    df['ColumnA'] = df[df.loc[:,['A','B','C']]].apply(
        lambda x: ','.join(x.dropna()),axis=1)   # ”1:“表示合并第一列之后的各列为一列
    
    • 1
    • 2

    再次报错:

    python .loc ValueError: Boolean array expected for the condition, not object

    在这里插入图片描述

    最后将我的代码改为

    df1 = df[['A','B','C']]
    df1['ColumnA'] = df1[df1.columns[1:]].apply(
        lambda x: ','.join(x.dropna()),axis=1)   # ”1:“表示合并第一列之后的各列为一列
    
    • 1
    • 2
    • 3

    噢终于解决了,ending

    完善:深入理解DataFrame:str.contains() 和 多列连接

    在数据分析和数据处理中,Pandas库是一个强大的工具。Pandas的DataFrame结构允许我们以表格形式组织数据,进行各种数据操作。在本文中,我们将深入探讨如何使用Pandas的str.contains()方法来进行字符串匹配和过滤,以及如何将多列数据连接成一列,以满足特定的需求。

    1. 数据准备

    首先,让我们创建一个示例DataFrame,以便演示str.contains()和多列连接的操作。我们将使用以下示例数据:

    import pandas as pd
    
    data = {
        'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'City': ['New York', 'Los Angeles', 'Chicago', 'San Francisco', 'Las Vegas'],
        'Email': ['alice@example.com', 'bob@gmail.com', 'charlie@example.com', 'david@yahoo.com', 'ella@gmail.com']
    }
    
    df = pd.DataFrame(data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这个DataFrame包含了姓名(‘Name’)、城市(‘City’)、和电子邮件(‘Email’)三列数据。

    2. 使用 str.contains() 进行字符串匹配和过滤

    有时,我们需要根据某列中的字符串内容进行过滤或筛选。Pandas的str.contains()方法非常有用,可以帮助我们实现这一目标。下面是如何使用str.contains()方法来筛选出包含特定字符串的行:

    # 筛选出包含 'New' 的城市
    new_york = df[df['City'].str.contains('New', case=False)]
    print("包含 'New' 的城市:\n", new_york)
    
    • 1
    • 2
    • 3

    在上面的示例中,我们使用str.contains()方法筛选出了城市列中包含’New’的行,并将结果存储在new_york DataFrame中。请注意,case=False参数用于忽略大小写,因此不区分大小写的字符串也会被匹配。

    3. 多列连接成一列

    有时,我们需要将多列数据连接成一列,以满足特定的需求。这在创建新特征或简化数据时非常有用。我们可以使用Pandas的.apply()方法来实现这一目标。

    下面是一个示例,演示如何将名字(‘Name’)和城市(‘City’)两列连接成一个全名的新列:

    # 将 'Name' 和 'City' 列连接成 'Full Name' 列
    df['Full Name'] = df.apply(lambda row: f"{row['Name']} from {row['City']}", axis=1)
    print("连接后的DataFrame:\n", df)
    
    • 1
    • 2
    • 3

    在上面的示例中,我们使用.apply()方法以行为单位应用了一个lambda函数,将’Name’和’City’两列连接成一个新列’Full Name’。

    4. 完整代码

    以下是完整的示例代码,包括数据准备、str.contains()的使用以及多列连接:

    import pandas as pd
    
    data = {
        'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'City': ['New York', 'Los Angeles', 'Chicago', 'San Francisco', 'Las Vegas'],
        'Email': ['alice@example.com', 'bob@gmail.com', 'charlie@example.com', 'david@yahoo.com', 'ella@gmail.com']
    }
    
    df = pd.DataFrame(data)
    
    # 使用 str.contains 进行字符串匹配和过滤
    new_york = df[df['City'].str.contains('New', case=False)]
    print("包含 'New' 的城市:\n", new_york)
    
    # 将 'Name' 和 'City' 列连接成 'Full Name' 列
    df['Full Name'] = df.apply(lambda row: f"{row['Name']} from {row['City']}", axis=1)
    print("连接后的DataFrame:\n", df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    5. 结论

    在数据处理中,字符串匹配和多列连接是常见的操作。Pandas库提供了强大的工具来执行这些任务,包括str.contains()方法和.apply()方法。通过学习并掌握这些技巧,您可以更好地处理和分析数据,满足不同的需求。希望本文的示例代码和解释对您的数据分析工作有所帮助。

  • 相关阅读:
    【计算机网络】三次握手与四次挥手(过程详解)
    android移植dbus
    数据结构——栈
    python判断是否到了文件尾
    如何使用ModelBox快速提升AI应用性能?
    异常校验处理
    Java项目:ssm赛事打分系统
    2022华数杯建模C题思路解析
    Java:为什么2022年Java应用开发很流行?
    sop作业指导书怎么做?sop标准作业指导书用什么软件做?
  • 原文地址:https://blog.csdn.net/wtyuong/article/details/127862483