2024-05-28 20:37:03 发布
网友
例如- 数据集,这是csv文件-
Name , Country, Income Alan Turing, UK, 1000 James Clark, US, 5000
我想对国家和收入进行一些转换,但将名称显示为
姓名 图灵 克拉克
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,上述代码将失败。下面的代码更健壮-
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'
(\w)\w* (\w+)
r'\1 \2'
如果名称为
Alan Turing Müller
,上述代码将失败。下面的代码更健壮-因为您用Python标记了这个问题并询问了数据帧,所以可以使用pandasreplace方法:
输出
模式
(\w)\w* (\w+)
是一个正则表达式,它捕获名字的第一个字母和(整个)姓。然后用名字的第一个字母和姓氏替换字符串r'\1 \2'
相关问题 更多 >
编程相关推荐