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

简介: 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'

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

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

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:“表示合并第一列之后的各列为一列

我的代码:

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

再次报错:

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:“表示合并第一列之后的各列为一列

噢终于解决了,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)

这个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)

在上面的示例中,我们使用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)

在上面的示例中,我们使用.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)

5. 结论

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

目录
相关文章
|
Python
apply函数的用法
apply是pandas处理数据经常用到的函数。我们可以用DataFrame的apply函数实现对多列、多行的操作。可通过axis设置参数,设为1是对列进行操作,参数axis设为0是对行操作。apply经常跟lambda一起使用,非常方便,大大提高了效率。
528 0
|
11月前
|
存储 数据挖掘 数据处理
Pandas 数据筛选:条件过滤
Pandas 是 Python 最常用的数据分析库之一,提供了强大的数据结构和工具。本文从基础到高级,介绍如何使用 Pandas 进行条件过滤,包括单一条件、多个条件过滤、常见问题及解决方案,以及动态和复杂条件过滤的高级用法。希望本文能帮助你更好地利用 Pandas 处理数据。
768 78
|
数据采集 机器学习/深度学习 存储
数字孪生:物理世界与数字世界的桥梁
【9月更文挑战第17天】在当今科技飞速发展的时代,数字孪生作为连接物理与数字世界的创新桥梁,正推动各行各业的智能化转型。本文深入探讨其概念、技术原理、应用场景及未来趋势,展示其独特魅力和广阔前景。数字孪生是物理实体的精准虚拟模型,通过实时数据采集和仿真分析,为决策提供支持。其核心技术包括数字化建模、数据采集和仿真分析,广泛应用于制造业、医疗健康、智慧城市、交通物流、教育等领域,推动社会智能化发展。未来,数字孪生将更加智能化、云端化、标准化,并实现跨领域融合。
|
9月前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
3658 11
阿里云PAI部署DeepSeek及调用
|
数据采集 索引 Python
Pandas之DataFrame,快速入门,迅速掌握(二)
Pandas之DataFrame,快速入门,迅速掌握(二)
503 0
|
Python
深入理解Python中的range函数和for循环
探索Python的`range`函数与for循环:用于迭代的整数序列生成。for循环遍历可迭代对象,range生成指定范围的整数。基本语法:`for i in range(start, stop, step)`。结合使用可实现循环迭代、列表生成器及循环嵌套。注意避免无限循环和大范围导致的性能问题。通过实例学习,如计算序列和、打印九九乘法表及遍历列表操作。深入了解这些概念,提升Python编程能力。
774 0
|
Python
在Python中处理文件路径
在Python中处理文件路径
313 0
|
关系型数据库 MySQL API
SqlAlchemy 2.0 中文文档(五十三)(1)
SqlAlchemy 2.0 中文文档(五十三)
231 0
|
SQL 数据采集 数据挖掘
Pandas DataFrame 基本操作实例100个
Pandas DataFrame 基本操作实例100个
644 1
|
分布式计算 资源调度 监控
【大数据】Hadoop 2.X和1.X升级优化对比
【大数据】Hadoop 2.X和1.X升级优化对比
273 0