我从包含以下列的 pandas 数据框开始:
Name: 'Computer', 'Tablet', 'Monitor'
Price: 900, 300, 400
Identifier: '11$10qw-IDAA', '2222-IL$DB123', '2237-12$33AVD-ewwfq'
我想创建一个数据框的新列(例如 NewString)来提取 标识符列中包含 $ 字符的子字符串。 也就是说,我想将包含值的列添加到 df:
NewString
11$10qw
IL$DB123
12$33AVD
我尝试使用两个嵌套的 for 循环来完成此操作:一个循环遍历 df 的所有行,并且 在另一个循环中,该循环作用于由“标识符”列上的分割形成的列表,但我无法解决它
您可以使用
apply
函数和自定义 lambda 函数从“标识符”列中提取所需的子字符串来实现此目的。这是一个例子:
import pandas as pd
# Your initial dataframe
data = {
'Name': ['Computer', 'Tablet', 'Monitor'],
'Price': [900, 300, 400],
'Identifier': ['11$10qw-IDAA', '2222-IL$DB123', '2237-12$33AVD-ewwfq']
}
df = pd.DataFrame(data)
# Function to extract substring containing "$"
def extract_substring(identifier):
parts = identifier.split('-') # Split by "-" to get individual parts
for part in parts:
if '$' in part:
return part
# Apply the function to create a new column
df['NewString'] = df['Identifier'].apply(lambda x: extract_substring(x))
# Display the resulting dataframe
print(df[['Name', 'Price', 'NewString']])
这段代码定义了一个函数
extract_substring
,它接受一个标识符,用“-”分隔它,并查找包含“$”的部分。然后使用 apply
函数将此函数应用于“Identifier”列的每一行,创建新的“NewString”列。
生成的数据框将具有“NewString”列,其中包含从“Identifier”列中提取的所需子字符串。
使用正则表达式与
str.extract
:
df['out'] = df['Identifier'].str.extract(r'([^-]*\$[^-]*)', expand=False)
输出:
Name Price Identifier out
0 Computer 900 11$10qw-IDAA 11$10qw
1 Tablet 300 2222-IL$DB123 IL$DB123
2 Monitor 400 2237-12$33AVD-ewwfq 12$33AVD