如何通过在DataFame中添加一些字符串前缀将数字值更改为对象值

时间:2019-04-04 09:13:43

标签: python pandas

我想使用替换方法更改数据框“ trainData”中“ MSSubClass”和“ MoSold”列的值:

“ MSSubClass”:将所有数值从20更改为“ SC20”,30:“ SC30”,40:“ SC40”,45:“ SC45”,50:“ SC50”,...

“ MoSold”:将所有数值更改为月份,例如1更改为“ Jan”,2:“ Feb”,3:“ Mar”,4:“ Apr”,5:“ May”,6:“ Jun” ,...

我尝试了如下的直接方法:

trainData['MSSubClass'].replace({20 : "SC20", 30 : "SC30", 40 : "SC40", 45 : "SC45", 50 : "SC50", 60 : "SC60", 70 : "SC70", 75 : "SC75", 80 : "SC80", 85 : "SC85", 90 : "SC90", 120 : "SC120", 150 : "SC150", 160 : "SC160", 180 : "SC180", 190 : "SC190"})

trainData['MoSold'].replace({1 : "Jan", 2 : "Feb", 3 : "Mar", 4 : "Apr", 5 : "May", 6 : "Jun", 7 : "Jul", 8 : "Aug", 9 : "Sep", 10 : "Oct", 11 : "Nov", 12 : "Dec"})

我想知道是否有更好或更有效的方法(也许仍然使用replace方法)

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您根本不应该关心效率。 (您可以,有人可能会回答最有效的方法,这是一个合理的问题)。我要关心的是使其变得Pythonic和干净。我会做的一个月(从Get month name from number复制):

import datetime
datetime.date(1900, monthinteger, 1).strftime('%B')

对于字符串,只需在数字前加上“ SC”字符串即可。 像这样:

'SC{}'.format(your_string), 

这使您的代码对任何人都可读。

如果您真的想使其漂亮,请在包装时使用一个名为month_number_to_string的函数

def month_number_to_string(month_number):
    return datetime.date(1900, month_number, 1).strftime('%B')

并将其应用于您想要的数据