我正在尝试处理具有混合数据性质的字符串列。此外,我在Pandas中尝试了一些操作,但是使用了大量内存,因此我希望切换到Koalas或Spark。
因此,假设这是我的数据框:
期间 | 班级 |
---|---|
00:00:09 | AAB |
00:00:08 | AAB |
00:37:55 | AAB |
00:10:20 | AAB |
00:18:29 | AAB |
00:18:20 | AAB |
00:10:41 | AAB |
00:18:20 | AAB |
00:16:29 | AAB |
00:08:09 | AAB |
00:18:19 | AAB |
00:01:39 | AAB |
1个 | RRE |
1个 | RRE |
234 | 患病的 |
452 | INL |
11220 | INL |
100 | AAB |
122 | AAB |
00:18:29 | BRQ |
1个 | BRQ |
2 | AKK |
8 | AKK |
duration
即使在使用不同正则表达式的Pandas中,这也是我无法理解的。此列是时间(HH:MM:SS)和数据单位(以KB为单位)的混合,我必须将其分为2个单独的列,即call_duration
和data
。
我尝试使用Koalas编写此代码,但是它不会从该列中拆分“时间”数据和“互联网数据”单元。
ks_preprocess_df["Duration"].str.split(r'^(?=\d\d\:\d\d\:\d\d\n)(?!.*[-])')
ks_preprocess_df["Duration"].str.split(r'^[?=\d+:\d+:\d\d\n][?]')
ks_preprocess_df["Duration"].str.split(r'\d\d\:\d\d\:\d\d\n', expand=True)
数据 | call_duration | 班级 |
---|---|---|
0 | 00:00:09 | AAB |
0 | 00:00:08 | AAB |
0 | 00:37:55 | AAB |
0 | 00:10:20 | AAB |
0 | 00:18:29 | AAB |
0 | 00:18:20 | AAB |
0 | 00:10:41 | AAB |
0 | 00:18:20 | AAB |
0 | 00:16:29 | AAB |
0 | 00:08:09 | AAB |
0 | 00:18:19 | AAB |
0 | 00:01:39 | AAB |
1个 | 空值 | RRE |
1个 | 空值 | RRE |
234 | 空值 | 患病的 |
452 | 空值 | INL |
11220 | 空值 | INL |
100 | 空值 | AAB |
122 | 空值 | AAB |
0 | 00:18:29 | BRQ |
1个 | 空值 | BRQ |
2 | 空值 | AKK |
8 | 空值 | AKK |
在pyspark你可以使用rlike
与when
表达:
from pyspark.sql import functions as F
df1 = df.withColumn(
"data",
F.when(F.col("duration").rlike("^[0-9]*$"), F.col("duration")).otherwise(0)
).withColumn(
"call_duration",
F.when(F.col("duration").rlike(r"^*\d{2}:\d{2}:\d{2}$"), F.col("duration"))
).select(
"data", "call_duration", "Class"
)
df1.show(20)
#+-----+-------------+-----+
#| data|call_duration|Class|
#+-----+-------------+-----+
#| 0| 00:00:09| AAB|
#| 0| 00:00:08| AAB|
#| 0| 00:37:55| AAB|
#| 0| 00:10:20| AAB|
#| 0| 00:18:29| AAB|
#| 0| 00:18:20| AAB|
#| 0| 00:10:41| AAB|
#| 0| 00:18:20| AAB|
#| 0| 00:16:29| AAB|
#| 0| 00:08:09| AAB|
#| 0| 00:18:19| AAB|
#| 0| 00:01:39| AAB|
#| 1| null| RRE|
#| 1| null| RRE|
#| 234| null| ILL|
#| 452| null| INL|
#|11220| null| INL|
#| 100| null| AAB|
#| 122| null| AAB|
#| 0| 00:18:29| BRQ|
#+-----+-------------+-----+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句