我正在研究pysparkDataframe
MINFLT MAJFLT VSTEXT VSIZE RSIZE VGROW RGROW
132K 224.4M 11160K 0 224.4M 11160K 0K
134M 224.9K 12260K 0 224.4M 11160K 0K
132K 225.5M 11160K 0 224.4M 11160K 0K
试图得到如下输出:
MINFLT MAJFLT VSTEXT VSIZE RSIZE VGROW RGROW
132000 24400000 11160000 0 224400000 11160000 0
我尝试了以下代码:
df.Val = (df.RSIZE.replace(r'[KM]+$', '', regex=True).astype(float) * \
df.RSIZE.str.extract(r'[\d\.]+([KM]+)', expand=False)
.fillna(1)
.replace(['K','M'], [10**3, 10**6]).astype(int))
但是,我得到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-206-489237518a0c> in <module>
----> 1 df.Val = (df.RSIZE.replace(r'[KM]+$', '', regex=True).astype(float) * \
2 df.RSIZE.str.extract(r'[\d\.]+([KM]+)', expand=False)
3 .fillna(1)
4 .replace(['K','M'], [10**3, 10**6]).astype(int))
TypeError: 'Column' object is not callable
我怎样才能解决这个问题?
2条答案
按热度按时间fumotvh31#
你能再检查一下你想用regexp\u替换还是引用替换吗。我在column类中没有找到replace。可以使用pyspark函数模块中的regex\u replace。
我已经为您的要求实现了以下代码:
输入:
输出:
lrl1mhuk2#
你可以使用一个Map,做一些字符串操作,然后进行最后的计算。
其中:在函数中
my_convert
,我们使用translate(c,'kmg','')删除字符K
,M
以及G
(您可以使用regexp\u replace执行相同的操作)。使用substring(c,-1,1)获取字符串的最后一个字符,并将其作为键从scale_map[..]
. 使用coalesce(..,lit(1))将比例设置为1
当没有找到这样的钥匙时scale_map
.