我有一个
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, "")
但都返回对象错误。
您可以使用
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 函数中的条件以满足您的特定要求。
您可以使用
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 列包含字符串数据且不包含空值,从而避免应用字符串方法时出现错误。
我从w3schools、pandas官方文档、geeksforgeeks和saturncloud
做了一些研究我希望这能解决您的问题。 😀