如何将DataFrame中String列转换为Int列表与String列表
解决方法:将DataFrame列转换为指定类型的List
从你的df.schema输出来看,这应该是一个Spark DataFrame~ 下面我分别给出Spark和Pandas两种常见场景的实现方案,按需取用:
一、Spark DataFrame场景
你的列b当前是StringType,需要先把每个元素转成整数再收集成List;列d本身就是StringType,直接收集即可:
- 转换列
b为Int类型的List
from pyspark.sql import functions as F # 先用cast将字符串转成整数,再用collect_list收集为列表 b_int_list = df.select(F.collect_list(F.col("b").cast("integer")).alias("b_int")).first()["b_int"]
如果b列存在无法转换为整数的字符串(比如字母、特殊符号),可以用try_cast替代cast,转换失败的元素会变成Null,避免程序报错:
b_int_list = df.select(F.collect_list(F.try_cast("b", "integer")).alias("b_int")).first()["b_int"]
- 转换列
d为String类型的List
# d列本身已是StringType,直接用collect_list收集即可 d_str_list = df.select(F.collect_list(F.col("d")).alias("d_str")).first()["d_str"]
二、Pandas DataFrame场景
如果是Pandas DataFrame的话操作更简洁,直接提取列后转换类型再转成List:
- 转换列
b为Int类型的List
# astype(int)将字符串列转为整数类型,tolist()把Series转成列表 b_int_list = df["b"].astype(int).tolist()
- 转换列
d为String类型的List
# 确保转为字符串类型后再转列表(即使d已是字符串,这一步也能避免潜在类型问题) d_str_list = df["d"].astype(str).tolist()
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

