Dataframe 如何从数据帧的字符串中获取数字
我有一个Dataframe 如何从数据帧的字符串中获取数字,dataframe,pyspark,apache-spark-sql,Dataframe,Pyspark,Apache Spark Sql,我有一个数据帧: ID | program | --------|-----------| 53-8975 | null | 53-9875 | null | 53A7569 | | 53-9456 | XXXX | 53-9875 | | --------------------- ID和程序是字符串。 我想用字母K填充program列中的所有null或”,如果ID列中的第四位是9。 例如: 我有两个I
数据帧
:
ID | program |
--------|-----------|
53-8975 | null |
53-9875 | null |
53A7569 | |
53-9456 | XXXX |
53-9875 | |
---------------------
ID
和程序
是字符串
。
我想用字母K
填充program
列中的所有null
或”
,如果ID
列中的第四位是9
。
例如:
我有两个ID,第四个是9:53-9875和53-9456,程序列的值分别是:null
和“”
如果ID
列中的4位是9
,而程序是null
或”
,我如何用字母K
填充列
要成为我的数据帧:
ID | program |
--------|-----------|
53-8975 | null |
53-9875 | K |
53A7569 | |
53-9456 | XXXX |
53-9875 | K |
---------------------
因此,如果我们有您的原始数据帧:
df = spark.createDataFrame([("53-8975", None), ("53-9875", None), ("53A7569", ""), ("53-9456", "XXXX"), ("53-9875", "")], ["id", "program"])
df.show()
+-------+-------+
| id|program|
+-------+-------+
|53-8975| null|
|53-9875| null|
|53A7569| |
|53-9456| XXXX|
|53-9875| |
+-------+-------+
我们可以使用when()创建一个转换,根据您的规范使用program
或“k”。否则()
:
谢谢你的回答,事实上我是这样修改的,我使用了你的解决方案:output=(df.select(F.col('program'),F.col('ID'))。withColumn(“program”),F.when((F.col(“program”)==”)(isnull(F.col(“program”))和(F.col(“ID”)。substr(4,1)=“9”),lit(“K”)。否则(F.col(“program”)))我得到了这个错误:TypeError:“Column”对象不可调用请提供一些帮助?您的修改中的括号有问题,它应该像output=(df.select(F.col('program'),F.col('ID'))。withColumn(“program”),F.when((F.col(“program”)=“”)(F.isnull(F.col(“program”))和(F.col(“ID”)。substr(4,1)=“9”),F.lit(“K”)。否则(F.col(“program”))
如果您认为答案有用,请接受答案并选择向上投票:)
from pyspark.sql.functions import *
programNullOrEmpty = (col("program") == "") | (isnull(col("program")))
id9 = col("id").substr(4,1) == "9"
df.withColumn("program", when(programNullOrEmpty & id9, lit("K"))
.otherwise(col("program")))\
.show()
+-------+-------+
| id|program|
+-------+-------+
|53-8975| null|
|53-9875| K|
|53A7569| |
|53-9456| XXXX|
|53-9875| K|
+-------+-------+