我在一个单元格中有单词和我想提取的单词。如何提取或删除不需要的词?
I have words in a cell mixed with word I want to extract. How do I extract the words or delete the words I don't need?
您好,我正在 Pandas 或 excel 中寻找解决方案。我有一个跨页 sheet,其中有一列包含用分号分隔的单词
apple - slice123; banana; apple - slice321; orange; citron; apple - slice345;
我想将“banana”、“orange”和“citron”提取到一个新列中。
我寻找标记化和 pandas 使用单词列表提取,但我没有找到解决方案。
我的原始 csv 包含 1058 行,有问题的列有 1 个正确的词(橙色等)和 1 个错误(苹果 - sliceXYZ)还有 5 个正确的词和最多 100 个错误。
我希望有人知道如何解决这个问题。
编辑澄清。
我在 table 中有 1027 行,但只有包含“水果”数据的列是相关的。我知道我在列的某处有 27 种不同的水果
编辑:我添加了 html table 进行说明。单词列表用于从列数据中识别出相关的“水果”,并在结果中告诉我列数据中使用了哪些水果。
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse; padding: 15px;
}
</style>
<table>
<tr>
<td><p><strong>Colunmn 1</strong></p></td>
<td><p><strong>Colunmn 2</strong></p></td>
<td><p><strong>Data</strong></p></td>
<td><p><strong>Result</strong></p></td>
</tr>
<tr>
<td><p>not relevant</p></td>
<td><p>not relevant</p></td>
<td><p>apple - slice123; banana; apple - slice321; orange; citron; apple - slice345</p></td>
<td><p>banana; orange; citron</p></td>
</tr>
<tr>
<td><p>not relevant</p></td>
<td><p>not relevant</p></td>
<td><p>apple - slice435; banana; apple - slice687; orange; citron; apple - slice334; mango; papaya</p></td>
<td><p>banana; orange; citron; mango; papaya</p></td>
</tr>
</table>
<p></p>
<table>
<tr>
<td><p> <strong>word list</strong><p></td>
</tr>
<tr>
<td><p>banana</p></td>
</tr>
<tr>
<td><p>orange<p></td>
</tr>
<tr>
<td><p>citron<p></td>
</tr>
<tr>
<td><p>mango<p></td>
</tr>
<tr>
<td><p>papaya<p></td>
</tr>
</table>
IIUC 你可以这样做:
df = pd.DataFrame(
{
"Col2": ["not relevant", "not relevant"],
"Data": [
"apple - slice123; banana; apple - slice321; orange; citron; apple - slice345;",
"apple - slice435; banana; apple - slice687; orange; citron; apple - slice334; mango; papaya",
],
}
)
word_list = ['banana', 'orange', 'citron', 'mango', 'papaya']
two options:
a)
df["Result"] = df["Data"].map(
lambda s: ";".join(
filter(None, [x.strip() for x in s.split(";") if "slice" not in x])
)
)
b)
df["Result"] = df["Data"].map(
lambda s: ";".join(
filter(None, [x.strip() for x in s.split(";") if x.strip() in word_list])
)
)
print(df['Result']
0 banana;orange;citron
1 banana;orange;citron;mango;papaya
Name: Result, dtype: object
如果您有 Excel 2019(或更大)并且第一个包含数据的单元格是 A1,您可以使用
=TEXTJOIN("; ",TRUE,(FILTERXML("<c><e>"&SUBSTITUTE(A1,";","</e><e>")&"</e></c>","//e[node() and not(contains(., '-'))]")))
如果你有 Excel 2013 到 2016 那么你可以只使用上面的 FILTERXML() 部分,但它必须作为数组公式输入,例如select个单元格B1:D1,在编辑栏输入公式,按CTRL+Shift+Enter确认
(您select输入了 3 个单元格,因为您希望得到 3 个结果)
您好,我正在 Pandas 或 excel 中寻找解决方案。我有一个跨页 sheet,其中有一列包含用分号分隔的单词
apple - slice123; banana; apple - slice321; orange; citron; apple - slice345;
我想将“banana”、“orange”和“citron”提取到一个新列中。
我寻找标记化和 pandas 使用单词列表提取,但我没有找到解决方案。
我的原始 csv 包含 1058 行,有问题的列有 1 个正确的词(橙色等)和 1 个错误(苹果 - sliceXYZ)还有 5 个正确的词和最多 100 个错误。
我希望有人知道如何解决这个问题。
编辑澄清。
我在 table 中有 1027 行,但只有包含“水果”数据的列是相关的。我知道我在列的某处有 27 种不同的水果
编辑:我添加了 html table 进行说明。单词列表用于从列数据中识别出相关的“水果”,并在结果中告诉我列数据中使用了哪些水果。
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse; padding: 15px;
}
</style>
<table>
<tr>
<td><p><strong>Colunmn 1</strong></p></td>
<td><p><strong>Colunmn 2</strong></p></td>
<td><p><strong>Data</strong></p></td>
<td><p><strong>Result</strong></p></td>
</tr>
<tr>
<td><p>not relevant</p></td>
<td><p>not relevant</p></td>
<td><p>apple - slice123; banana; apple - slice321; orange; citron; apple - slice345</p></td>
<td><p>banana; orange; citron</p></td>
</tr>
<tr>
<td><p>not relevant</p></td>
<td><p>not relevant</p></td>
<td><p>apple - slice435; banana; apple - slice687; orange; citron; apple - slice334; mango; papaya</p></td>
<td><p>banana; orange; citron; mango; papaya</p></td>
</tr>
</table>
<p></p>
<table>
<tr>
<td><p> <strong>word list</strong><p></td>
</tr>
<tr>
<td><p>banana</p></td>
</tr>
<tr>
<td><p>orange<p></td>
</tr>
<tr>
<td><p>citron<p></td>
</tr>
<tr>
<td><p>mango<p></td>
</tr>
<tr>
<td><p>papaya<p></td>
</tr>
</table>
IIUC 你可以这样做:
df = pd.DataFrame(
{
"Col2": ["not relevant", "not relevant"],
"Data": [
"apple - slice123; banana; apple - slice321; orange; citron; apple - slice345;",
"apple - slice435; banana; apple - slice687; orange; citron; apple - slice334; mango; papaya",
],
}
)
word_list = ['banana', 'orange', 'citron', 'mango', 'papaya']
two options:
a)
df["Result"] = df["Data"].map(
lambda s: ";".join(
filter(None, [x.strip() for x in s.split(";") if "slice" not in x])
)
)
b)
df["Result"] = df["Data"].map(
lambda s: ";".join(
filter(None, [x.strip() for x in s.split(";") if x.strip() in word_list])
)
)
print(df['Result']
0 banana;orange;citron
1 banana;orange;citron;mango;papaya
Name: Result, dtype: object
如果您有 Excel 2019(或更大)并且第一个包含数据的单元格是 A1,您可以使用
=TEXTJOIN("; ",TRUE,(FILTERXML("<c><e>"&SUBSTITUTE(A1,";","</e><e>")&"</e></c>","//e[node() and not(contains(., '-'))]")))
如果你有 Excel 2013 到 2016 那么你可以只使用上面的 FILTERXML() 部分,但它必须作为数组公式输入,例如select个单元格B1:D1,在编辑栏输入公式,按CTRL+Shift+Enter确认 (您select输入了 3 个单元格,因为您希望得到 3 个结果)