없음 값을 사용하여 Pyspark 데이터 프레임 열 필터링
다음을 포함하는 PySpark 데이터 프레임을 필터링하려고 합니다.None
행 값으로:
df.select('dt_mvmt').distinct().collect()
[Row(dt_mvmt=u'2016-03-27'),
Row(dt_mvmt=u'2016-03-28'),
Row(dt_mvmt=u'2016-03-29'),
Row(dt_mvmt=None),
Row(dt_mvmt=u'2016-03-30'),
Row(dt_mvmt=u'2016-03-31')]
문자열 값을 사용하여 올바르게 필터링할 수 있습니다.
df[df.dt_mvmt == '2016-03-31']
# some results here
하지만 이것은 실패합니다.
df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0
하지만 각 범주에는 분명히 가치가 있습니다.무슨 일이야?
사용할 수 있습니다.Column.isNull
/Column.isNotNull
:
df.where(col("dt_mvmt").isNull())
df.where(col("dt_mvmt").isNotNull())
단순히 삭제하고 싶은 경우NULL
사용할 수 있는 값na.drop
와 함께subset
인수:
df.na.drop(subset=["dt_mvmt"])
과의 동등성 기반 비교NULL
SQL에서 때문에 작동하지 않습니다.NULL
정의되지 않았으므로 다른 값과 비교하려고 하면 반환됩니다.NULL
:
sqlContext.sql("SELECT NULL = NULL").show()
## +-------------+
## |(NULL = NULL)|
## +-------------+
## | null|
## +-------------+
sqlContext.sql("SELECT NULL != NULL").show()
## +-------------------+
## |(NOT (NULL = NULL))|
## +-------------------+
## | null|
## +-------------------+
값을 비교할 수 있는 유일한 유효한 방법NULL
이라IS
/IS NOT
그것들은 그것과 동등합니다.isNull
/isNotNull
메서드 호출.
isNotNull 함수만 사용해 보십시오.
df.filter(df.dt_mvmt.isNotNull()).count()
의 값을 가진 항목을 가져오려면 다음과 같이 하십시오.dt_mvmt
열이 null이 아닙니다.
df.filter("dt_mvmt is not NULL")
그리고 null인 항목에 대해 우리는 가지고 있습니다.
df.filter("dt_mvmt is NULL")
DataFrame의 열에서 null 값을 제거/필터링할 수 있는 방법은 여러 가지가 있습니다.
다음 코드로 간단한 데이터 프레임을 생성합니다.
date = ['2016-03-27','2016-03-28','2016-03-29', None, '2016-03-30','2016-03-31']
df = spark.createDataFrame(date, StringType())
이제 다음 방법 중 하나를 사용하여 null 값을 필터링할 수 있습니다.
# Approach - 1
df.filter("value is not null").show()
# Approach - 2
df.filter(col("value").isNotNull()).show()
# Approach - 3
df.filter(df["value"].isNotNull()).show()
# Approach - 4
df.filter(df.value.isNotNull()).show()
# Approach - 5
df.na.drop(subset=["value"]).show()
# Approach - 6
df.dropna(subset=["value"]).show()
# Note: You can also use where function instead of a filter.
자세한 내용은 블로그의 "NULL 값으로 작업" 섹션을 참조할 수도 있습니다.
도움이 되길 바랍니다.
isNull()
/isNotNull()
의 각 행을 반환합니다.dt_mvmt
Null 또는 !Null로 지정합니다.
method_1 = df.filter(df['dt_mvmt'].isNotNull()).count()
method_2 = df.filter(df.dt_mvmt.isNotNull()).count()
둘 다 동일한 결과를 반환합니다.
if 열 = 없음
COLUMN_OLD_VALUE
----------------
None
1
None
100
20
------------------
데이터 프레임에 유혹적인 이미지 생성:
sqlContext.sql("select * from tempTable where column_old_value='None' ").show()
따라서 사용:column_old_value='None'
만약 당신이 판다 구문을 유지하고 싶다면, 이것은 저에게 효과가 있었습니다.
df = df[df.dt_mvmt.isNotNull()]
None/Null은 PySpark/Python에서 NoneType 클래스의 데이터 형식이므로 NoneType 개체를 문자열 개체와 비교하려고 하면 아래에서 작동하지 않습니다.
잘못된 필터링 방법
df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0
맞아요.
df=df.where(col("dt_mvmt").isNotNull())
모든 레코드를 반환합니다.dt_mvmt
없음/null로
PySpark는 산술, 논리 및 기타 조건에 따라 다양한 필터링 옵션을 제공합니다.NULL 값이 있으면 추가 프로세스를 방해할 수 있습니다.그들을 제거하거나 통계적으로 귀속시키는 것이 선택이 될 수 있습니다.
아래 코드 집합을 고려할 수 있습니다.
# Dataset is df
# Column name is dt_mvmt
# Before filtering make sure you have the right count of the dataset
df.count() # Some number
# Filter here
df = df.filter(df.dt_mvmt.isNotNull())
# Check the count to ensure there are NULL values present (This is important when dealing with large dataset)
df.count() # Count should be reduced if NULL values are present
열에 없음 값이 있는 레코드를 필터링하려면 다음 예를 참조하십시오.
df=spark.createDataFrame([[123,"abc"],[234,"fre"],[345,None]],["a","b"])
이제 null 값 레코드를 필터링합니다.
df=df.filter(df.b.isNotNull())
df.show()
DF에서 이러한 레코드를 제거하려면 아래를 참조하십시오.
df1=df.na.drop(subset=['b'])
df1.show()
pyspark »사용할 수 있는 항목:
from pyspark.sql.functions import *
df.filter(col("dt_mvmt").isNull()).show()
언급URL : https://stackoverflow.com/questions/37262762/filter-pyspark-dataframe-column-with-none-value
'programing' 카테고리의 다른 글
목록에 대한 모델 유효성 검사 보기 (0) | 2023.06.11 |
---|---|
코코아 및 목표-C를 사용한 참조 카운트 이해 (0) | 2023.06.11 |
HttpRuntime 간의 차이입니다.캐시 및 HttpContext.현재의.캐시? (0) | 2023.06.11 |
이진 표기법에서 기수점 "." 뒤의 자릿수는 무엇을 의미합니까? (0) | 2023.06.11 |
wordpers 연락처 양식 7은 HTML 콘텐츠를 보내지 않습니다. (0) | 2023.06.11 |