여러 행의 모든 "NULL"값을 "0"으로 바꾸기
속성 테이블의 "NULL"여러 행 / 모든 값에 걸쳐 모든 값을 대체하는 방법을 찾고 "NULL"있습니다. 이 테이블은 SHP 파일 (shapefile)에서 가져온 것입니다.
쉬운 방법이 있습니까? 지금은 손으로 선택하고 행별로 교체하는데 시간이 많이 걸립니다. 나는 이미 해결책을 찾으려고 노력했지만 전체 테이블에서 그것들을 교체하고 싶기 때문에 그렇게 쉽지 않은 것 같습니다.
답변
이것은 텍스트 및 숫자 필드에서 작동합니다. 먼저 데이터를 백업하십시오 ..
layer = QgsProject.instance().mapLayersByName('replacenulls_backup')[0]
fs = layer.fields()
d = {e:0 if f.isNumeric() else '0' for e,f in enumerate(fs)}
with edit(layer):
for row in layer.getFeatures():
data = row.attributes()
for i, val in enumerate(data):
if val == NULL:
data[i]=d[i]
row.setAttributes(data)
layer.updateFeature(row)
속성 테이블에있는 모든 속성에 대해 PyQGIS를 사용하는 또 다른 대안입니다.
"line"그에 따라 속성 테이블 이있는 폴리 라인 레이어 (파란색) 가 있다고 가정 합니다. 아래 이미지를 참조하십시오.
계속해서 Plugins > Python Console > Show Editor아래 스크립트를 붙여 넣으십시오.
# accessing a layer with polyline features by its name
lines_null = QgsProject.instance().mapLayersByName("line")[0]
# starting the editing of the layer
lines_null.startEditing()
# looping over each feature from the layer
for feature in lines_null.getFeatures():
# looping over each attribute from the attribute table of the layer
for i in lines_null.attributeList():
# getting only attributes with NULL-values
if feature[lines_null.attributeDisplayName(i)] == NULL:
feature[lines_null.attributeDisplayName(i)] = 0 # appropriating each NULL-value with 0
lines_null.updateFeature(feature) # updating the layer with the new feature value
# committing changes in the attribute table
lines_null.commitChanges()
눌러서 Run script
'0'필드 유형에 따라 값 이 다르게 표시됩니다.
type | was | will be
string | NULL | 0
integer | NULL | 0
real | NULL | 0,0
참조 :
- PyQGIS 101 : 새 벡터 레이어 생성 및 편집
- PyQGIS를 사용하여 속성 값을 읽는 방법은 무엇입니까?
- 파이썬을 통해 QGIS에서 중심 얻기
또한 프로그래밍이없는 솔루션입니다.
"line"그에 따라 속성 테이블 이있는 폴리 라인 레이어 (파란색) 가 있다고 가정 합니다. 아래 이미지를 참조하십시오.
"Refactor fields"지리 알고리즘을 배포합니다 . 안타깝게도 '소스 표현식' 을 조건부 함수 로 채우는 것이 여전히 필요 하다는 단점 이 있습니다 if(condition,result_when_true,result_when_false).
출력을 얻으십시오.