programing

pyspark 데이터 프레임에서 문자열 유형의 열을 int 형식으로 변환하는 방법은 무엇입니까?

codeshow 2023. 9. 24. 13:13
반응형

pyspark 데이터 프레임에서 문자열 유형의 열을 int 형식으로 변환하는 방법은 무엇입니까?

pyspark에 데이터 프레임이 있습니다.일부 숫자 열은 다음을 포함합니다.nan그래서 내가 데이터를 읽고 데이터 프레임의 스키마를 확인할 때, 그 열들은string유형.

int 타입으로 변경하는 방법.교체했습니다.nan값이 0이고 스키마를 다시 확인했지만 해당 열에 대한 문자열 유형도 표시됩니다.저는 아래 코드를 따르고 있습니다.

data_df = sqlContext.read.format("csv").load('data.csv',header=True, inferSchema="true")
data_df.printSchema()
data_df = data_df.fillna(0)
data_df.printSchema()

제 데이터는 다음과 같습니다.

여기란Plays그리고.drafts정수 값을 포함하고 있지만 이유는nan이 열에 존재하며 문자열 유형으로 처리됩니다.

from pyspark.sql.types import IntegerType
data_df = data_df.withColumn("Plays", data_df["Plays"].cast(IntegerType()))
data_df = data_df.withColumn("drafts", data_df["drafts"].cast(IntegerType()))

각 열에 대해 루프를 실행할 수 있지만 이것이 문자열 열을 정수로 변환하는 가장 간단한 방법입니다.

당신은 사용할 수 있습니다.cast바꿔치기 한 후에NaN와 함께0,

data_df = df.withColumn("Plays", df.call_time.cast('float'))

수정해야 할 필드가 여러 개인 경우 StructField를 사용하는 것도 방법입니다.

예:

from pyspark.sql.types import StructField,IntegerType, StructType,StringType
newDF=[StructField('CLICK_FLG',IntegerType(),True),
       StructField('OPEN_FLG',IntegerType(),True),
       StructField('I1_GNDR_CODE',StringType(),True),
       StructField('TRW_INCOME_CD_V4',StringType(),True),
       StructField('ASIAN_CD',IntegerType(),True),
       StructField('I1_INDIV_HHLD_STATUS_CODE',IntegerType(),True)
       ]
finalStruct=StructType(fields=newDF)
df=spark.read.csv('ctor.csv',schema=finalStruct)

출력:

전에

root
 |-- CLICK_FLG: string (nullable = true)
 |-- OPEN_FLG: string (nullable = true)
 |-- I1_GNDR_CODE: string (nullable = true)
 |-- TRW_INCOME_CD_V4: string (nullable = true)
 |-- ASIAN_CD: integer (nullable = true)
 |-- I1_INDIV_HHLD_STATUS_CODE: string (nullable = true)

이후:

root
 |-- CLICK_FLG: integer (nullable = true)
 |-- OPEN_FLG: integer (nullable = true)
 |-- I1_GNDR_CODE: string (nullable = true)
 |-- TRW_INCOME_CD_V4: string (nullable = true)
 |-- ASIAN_CD: integer (nullable = true)
 |-- I1_INDIV_HHLD_STATUS_CODE: integer (nullable = true)

이것은 캐스팅하기에는 약간 긴 절차이지만, 필요한 모든 필드를 수행할 수 있다는 장점이 있습니다.

필수 필드에만 데이터 유형이 할당된 경우 결과 데이터 프레임에는 변경된 필드만 포함됩니다.

언급URL : https://stackoverflow.com/questions/46956026/how-to-convert-column-with-string-type-to-int-form-in-pyspark-data-frame

반응형