从整个 pandas 数据框中删除特定字符串

问题描述 投票:0回答:1

我有一个

df
:

Names
--------
John from LawYaw
Lawrence Brown
Lawyer Darrick
Lawrence Taylor
John Lawrence Brown
KHL Law
Lawyers Title

我想删除包含完整字符串“Lawrence”的所有行,但想保留不包含完整字符串的行。例如,最后的

df
应出现:

Names
--------
John from LawYaw
Lawyer Darrick
KHL Law
Lawyers Title

我尝试过

df[~df.column.str.contains("string")]
df["column"].str.replace("string, "")
但都返回对象错误。

pandas string dataframe
1个回答
0
投票

解决方案

1.更换方法

您可以使用

replace()
方法从整个 pandas DataFrame 中删除特定字符串。方法如下:

import pandas as pd

# Sample DataFrame
data = {'col1': ['apple', 'banana', 'orange', 'apple'],
        'col2': ['apple', 'grape', 'apple', 'banana']}
df = pd.DataFrame(data)

# Strings to remove
strings_to_remove = ['apple', 'banana']

# Replace strings with empty string
df.replace(strings_to_remove, '', regex=True, inplace=True)

print(df)

这会将整个 DataFrame 中出现的所有字符串“apple”和“banana”替换为空字符串。

如果要删除包含特定字符串的行,可以使用布尔索引。例如:

# Remove rows containing 'apple' in any column
df = df[~df.apply(lambda row: row.astype(str).str.contains('apple')).any(axis=1)]

print(df)

这将删除 DataFrame 任何列中包含字符串“apple”的所有行。您可以调整 lambda 函数中的条件以满足您的特定要求。

2.应用地图功能

您可以使用

applymap()
函数以及处理字符串删除的自定义函数。方法如下:

import pandas as pd

# Sample DataFrame
data = {'col1': ['apple', 'banana', 'orange', 'apple'],
        'col2': ['apple', 'grape', 'apple', 'banana']}
df = pd.DataFrame(data)

# Define a function to remove specific strings
def remove_string(x, string_to_remove):
    if isinstance(x, str):
        return x.replace(string_to_remove, '')
    else:
        return x

# Strings to remove
string_to_remove = 'apple'

# Apply the function to the entire DataFrame
df = df.applymap(lambda x: remove_string(x, string_to_remove))

print(df)

这将从整个 DataFrame 中删除所有出现的字符串“apple”。您可以调整 string_to_remove 变量来指定要删除的不同字符串。

确保您的 DataFrame 仅包含字符串数据,因为将字符串方法应用于非字符串数据将导致错误。如果您的 DataFrame 包含混合数据类型,您可能需要首先使用 astype(str) 将整个 DataFrame 转换为字符串。

如果要从各个列中删除特定字符串,可以直接对这些列应用 str.replace() 方法:

# Remove specific strings from individual columns
df['col1'] = df['col1'].str.replace(string_to_remove, '')
df['col2'] = df['col2'].str.replace(string_to_remove, '')

此方法只会从指定列中删除指定字符串,而 DataFrame 的其余部分保持不变。

您的原始代码不起作用的原因:

  • 列中的非字符串数据:如果您的 DataFrame 列包含非字符串数据类型(例如整数、浮点数),尝试使用

    str.contains()
    str.replace()
    等字符串方法将导致错误,因为这些方法只是适用于字符串数据。在应用字符串方法之前,您需要确保该列包含字符串数据。

  • 空值:如果您的列包含空值 (NaN),尝试直接应用字符串方法将引发错误,因为这些方法无法应用于空值。在应用字符串方法之前,您可能需要处理或删除空值。

要解决这些问题:

  • 确保您正在使用的列包含字符串数据。
  • 处理或删除列中存在的空值。

以下是解决这些问题的方法:

# Check data types of the column
print(df['column'].dtype)

# Convert non-string data types to string
df['column'] = df['column'].astype(str)

# Remove null values from the column
df = df.dropna(subset=['column'])

# Apply string methods after ensuring data types and handling null values
df = df[~df['column'].str.contains("string")]
df['column'] = df['column'].str.replace("string", "")

通过执行以下步骤,您可以确保 DataFrame 列包含字符串数据且不包含空值,从而避免应用字符串方法时出现错误。

我从w3schoolspandas官方文档geeksforgeekssaturncloud

做了一些研究

我希望这能解决您的问题。 😀

© www.soinside.com 2019 - 2024. All rights reserved.