我在一个单元格中有单词和我想提取的单词。如何提取或删除不需要的词?

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 个结果)