【问题标题】:Swift MLDataTable - how to remove rows?Swift MLDataTable - 如何删除行?
【发布时间】:2019-02-14 18:19:31
【问题描述】:

我正在从 .csv 文件创建一个 MLDataTable,并希望删除一些行,即特定列具有特定值的所有行 - 这可能吗?

【问题讨论】:

    标签: swift macos-mojave createml


    【解决方案1】:

    我知道我的回答有点晚了,但希望其他人会发现它有用。

    您无法从给定表中删除行,但您可以创建一个过滤掉一些行的新表。

    这是一个示例表:

    let employeesDict: [String: MLDataValueConvertible] = [
        "First Name": ["Alice", "Bob", "Charlie", "Dave", "Eva"],
        "Years of experience": [10, 1, 8, 5, 3],
        "Gender": ["female", "male", "male", "male", "female"],
    ]
    
    let employeesTable = try! MLDataTable(dictionary: employeesDict)
    

    过滤是通过将MLDataColumn<Bool> 的实例传递给表的下标运算符来实现的。苹果称其为“行掩码”。 这是一个用于过滤掉手工构建的女性实例的行掩码:

    let maleEmployeesMaskByHand = MLDataColumn([false, true, true, true, false])
    

    将它作为参数传递给employeesTable 的下标运算符会产生下表:

    let maleEmployeesTable = employeesTable[maleEmployeesMaskByHand]
    print(maleEmployeesTable)
    +----------------+----------------+---------------------+
    | Gender         | First Name     | Years of experience |
    +----------------+----------------+---------------------+
    | male           | Bob            | 1                   |
    | male           | Charlie        | 8                   |
    | male           | Dave           | 5                   |
    +----------------+----------------+---------------------+
    

    这是构建相同行掩码的另一种方法:

    let genderColumn: MLDataColumn<String> = employeesTable["Gender"]
    let maleEmployeesMask = genderColumn != "female"
    print(employeesTable[maleEmployeesMask])
    

    首先检索所需的列,然后 - 由于运算符重载 - 通过将 != 运算符应用于整个列来构建行掩码。

    这是一种在一行中实现相同的方法:

    print(employeesTable[ employeesTable["Gender"] != "female" ])
    

    相关文档的链接:https://developer.apple.com/documentation/createml/mldatatable/3006094-subscript

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2018-10-26
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多