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()方法。通过学习并掌握这些技巧,您可以更好地处理和分析数据,满足不同的需求。希望本文的示例代码和解释对您的数据分析工作有所帮助。

目录
相关文章
|
2月前
|
机器学习/深度学习 Python
pandas将dataframe列中的list转换为多列
在应用机器学习的过程中,很大一部分工作都是在做数据的处理,一个非常常见的场景就是将一个list序列的特征数据拆成多个单独的特征数据。
51 0
|
5月前
dataframe获取指定列
dataframe获取指定列
548 0
|
7月前
|
Python
在dataframe中插入新的一行
在pandas中,可以使用`insert`函数在dataframe中插入新的一行。
808 1
|
1月前
|
索引 Python
pandas读取某列、某行数据——loc、iloc用法总结
pandas读取某列、某行数据——loc、iloc用法总结
103 2
|
7月前
|
Python
在dataframe中插入新的一列
在pandas中,可以使用`insert`函数在dataframe中插入新的一列。以下是一个例子:
141 0
|
2月前
|
SQL 人工智能 数据处理
Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)
Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)
73 0
|
6月前
|
Cloud Native Go Python
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
220 0
|
7月前
|
Python
dataframe 中float转字符串
要将DataFrame中的浮点数列转换为字符串列,可以使用`astype()`方法将列的数据类型转换为字符串。以下是一个示例: 假设有一个DataFrame `df`,其中包含一个名为`column_name`的浮点数列: ```python import pandas as pd # 示例DataFrame df = pd.DataFrame({'column_name': [1.0, 2.5, 3.2, 4.7]}) # 将浮点数列转换为字符串列 df['column_name'] = df['column_name'].astype(str) # 打印转换后的DataFrame
183 0
|
7月前
|
Python
实现DataFrame的自定义排序
要实现DataFrame的自定义排序,可以使用pandas库中的sort_values()函数。首先,需要导入pandas库,然后创建一个DataFrame,接着使用sort_values()函数对指定列进行排序。
256 0
|
10月前
|
索引
避免在索引列上使用内置函数
避免在索引列上使用内置函数

热门文章

最新文章