gpt4 book ai didi

python - 如何根据列中字符串的长度有条件地从 PySpark Dataframe StringType() 列中删除字符子串?

转载 作者:行者123 更新时间:2023-12-04 15:45:58 27 4
gpt4 key购买 nike

我有一个 PySpark 数据框,其中的 StringType() 列主要包含 15 个字符。但是,有些行有 11 个字符。示例:

df = 
+--------------+--------+
| code|state|
+--------------+--------+
|'334445532234553'|wa |
|'332452132234553'|mn |
|'45532234553' |fl |
|'679645532234553'|mo |
|'918535532234553'|ar |
|'174925532234553'|wi |
|'45532234553' |al |
|'928405532234553'|ca |
+--------------+--------+

我需要所有行都包含 11 个字符,并从包含 15 个字符的任何行中删除最后 4 个字符。所以这是我想要的输出:

df.show(8) = 
+-------------+-----+
| code|state|
+-------------+-----+
|'33444553223'|wa |
|'33245213223'|mn |
|'45532234553'|fl |
|'67964553223'|mo |
|'91853553223'|ar |
|'17492553223'|wi |
|'45532234553'|al |
|'92840553223'|ca |
+-------------+-----+

到目前为止,我进行了这种转换,它从名为“代码”的列中的所有行中删除了最后 4 个字符:

from pyspark.sql.functions import substring, length, col, expr

df = df.withColumn("code",expr("substring(code, 1, length(code)-4)"))

所以我需要做一些事情来使这个以行内字符串的长度为条件。

编辑 在@gmds 的帮助下,我找到了这个解决方案:

df.withColumn("code",expr("substring(code, 1, 11)"))

最佳答案

这个怎么样:

df.withColumn('code', df['code'].substr(1, 11))

你的想法是对的;只是当您真正想要一个常量时,您为子字符串的长度提供了一个变化的值。

关于python - 如何根据列中字符串的长度有条件地从 PySpark Dataframe StringType() 列中删除字符子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778505/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com