如何使用sparksql或数据帧在pyspark中拆分变量并以特定格式显示?

2024-05-28 20:37:03 发布

您现在位置:Python中文网/ 问答频道 /正文

例如- 数据集,这是csv文件-

Name       ,  Country,  Income
Alan Turing,  UK,       1000
James Clark,  US,       5000

我想对国家和收入进行一些转换,但将名称显示为

姓名
图灵
克拉克


Tags: 文件csv数据name名称国家countryus
2条回答
from pyspark.sql.functions import split,concat,lit
myValues = [('Alan Turing','UK',1000),('James Clark','US',5000)]
df = sqlContext.createDataFrame(myValues,['Name','Country','Income'])
df.show()
+     -+   -+   +
|       Name|Country|Income|
+     -+   -+   +
|Alan Turing|     UK|  1000|
|James Clark|     US|  5000|
+     -+   -+   +
df = df.withColumn('Name', concat(split(df['Name'], ' ')[0].substr(0,1), lit(' '), split(df['Name'], ' ')[1]))
df.show()
+    +   -+   +
|    Name|Country|Income|
+    +   -+   +
|A Turing|     UK|  1000|
| J Clark|     US|  5000|
+    +   -+   +

如果名称为Alan Turing Müller,上述代码将失败。下面的代码更健壮-

from pyspark.sql.functions import concat, instr, length
myValues = [('Alan Turing Müller','UK',1000),('James Clark','US',5000)]
df = sqlContext.createDataFrame(myValues,['Name','Country','Income'])
df.show()
+         +   -+   +
|              Name|Country|Income|
+         +   -+   +
|Alan Turing Müller|     UK|  1000|
|       James Clark|     US|  5000|
+         +   -+   +
df = df.withColumn('Name', concat(df['Name'].substr(0,1),df['Name'].substr(instr(df['Name'],' '),length(df['Name'])-instr(df['Name'],' ')+1)))
df.show()
+       -+   -+   +
|           Name|Country|Income|
+       -+   -+   +
|A Turing Müller|     UK|  1000|
|        J Clark|     US|  5000|
+       -+   -+   +

因为您用Python标记了这个问题并询问了数据帧,所以可以使用pandasreplace方法:

import pandas as pd


data = [['Alan Turing',  'UK',       1000],
['James Clark',  'US',       5000]]


df = pd.DataFrame(data=data, columns=['Name', 'Country', 'Income'])
df['Name'] = df.Name.str.replace('(\w)\w* (\w+)', r'\1 \2', regex=True)

print(df)

输出

Name Country  Income
0  A Turing      UK    1000
1   J Clark      US    5000

模式(\w)\w* (\w+)是一个正则表达式,它捕获名字的第一个字母和(整个)姓。然后用名字的第一个字母和姓氏替换字符串r'\1 \2'

相关问题 更多 >

    热门问题