特定の列のセルが空の行を削除する


8

属性テーブルの特定の列のセルが空であるQGISのすべての行を削除する方法はありますか?たとえば、下の表の3行目。約180,000行の大規模なデータセットに対してこれを行う必要があります。

| ID  | 2LE  | CHECK |
|-----|------|-------|
| 1   | PT   | FALSE |
| 2   | PT   | TRUE  |
| 3   | NULL | TRUE  |
| 4   | AT   | FALSE |

これはQGISの外では簡単かもしれません。保存されているデータは何ですか?
jpmc26 2018年

回答:


7

レイヤーをフィルタリングすることもできます。

レイヤーを右クリックして、を選択Filterして使用します"2LE" IS NOT NULL。その後、右クリックしてSave As別のベクターレイヤーを作成できます。


7

Pythonコンソールで次のように使用できます。レイヤーを選択して、次のようなものを使用します。

layer = iface.activeLayer()
with edit(layer):
    listOfIds = [feat.id() for feat in layer.getFeatures() if feat['fieldName'] == NULL]
    layer.deleteFeatures(listOfIds)

5

仮想レイヤーを使用して、元のデータセットを保持し、新しいデータセットを作成できます。

ジオメトリがない場合は、[仮想レイヤーの作成]ウィンドウで[ジオメトリなし]をオンにする必要があります。

NULLまたは「」を確認する方法はいくつかあります。SQLite select where where empty?も参照してください-スタックオーバーフロー

クエリの例。私は興味があり、それらをすべてテストし、成功しました(エラーなし):

SELECT * FROM your_table WHERE "2LE" IS NOT NULL

>

SELECT * FROM your_table WHERE "2LE" != 'NULL'  #if `NULL` is a string:

>

SELECT * FROM your_table WHERE ifnull("2LE", '') != ''

>

SELECT * FROM your_table WHERE ifnull(length("2LE"), 0) != 0

>

SELECT * FROM your_table WHERE coalesce("2LE", '') != ''

Save Asクエリ(仮想レイヤー)を新しいベクターファイルに(右クリック)できます。


5

属性テーブルで、「式で選択」(フィルターではなく)を使用して、削除する機能に一致"2LE" IS NULLするように式を入力します。次に、これらの機能をすべて選択すると、黄色で表示されます。

次に、編集をオンにして(ツールバーなどの鉛筆アイコンで切り替え)、Ctrl-Xを押すか、[編集]メニューの[機能の切り取り]を使用します。選択した機能が消えます。

次に、編集をオフに切り替え(鉛筆アイコン)、必要に応じて変更を保存するように求められます。これにより、ディスクまたはデータベース上の元のデータが上書きされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.