Map Column Birthdates In Python Pandas Df To Astrology Signs
I have a dataframe with a column that includes individuals' birthdays. I would like to map that column to the individuals' astrology sign using code I found (below). I am having tr
Solution 1:
Change previous answer by Series.dt.month_name
with lowercase strings:
def zodiac_sign(day, month):
# checks month and date within the valid range
# of a specified zodiac
if month == 'december':
return'Sagittarius'if (day < 22) else'capricorn'
elif month == 'january':
return'Capricorn'if (day < 20) else'aquarius'
elif month == 'february':
return'Aquarius'if (day < 19) else'pisces'
elif month == 'march':
return'Pisces'if (day < 21) else'aries'
elif month == 'april':
return'Aries'if (day < 20) else'taurus'
elif month == 'may':
return'Taurus'if (day < 21) else'gemini'
elif month == 'june':
return'Gemini'if (day < 21) else'cancer'
elif month == 'july':
return'Cancer'if (day < 23) else'leo'
elif month == 'august':
return'Leo'if (day < 23) else'virgo'
elif month == 'september':
return'Virgo'if (day < 23) else'libra'
elif month == 'october':
return'Libra'if (day < 23) else'scorpio'
elif month == 'november':
return'scorpio'if (day < 22) else'sagittarius'
dates = pd.to_datetime(astrology['birthdate'])
y = dates.dt.year
now = pd.to_datetime('now').year
astrology = astrology.assign(month= dates.dt.month_name().str.lower(),
day= dates.dt.day,
year= y.mask(y > now, y -100))
print (astrology)
birthdate answer YEARMONTH-DAYmonthdayyear01970-03-315197003-31 march 31197011970-05-259197005-25 may 25197021970-06-053197006-05 june 5197031970-08-282197008-28 august 281970
astrology['sign']=astrology.apply(lambdax:zodiac_sign(x['day'],x['month']),axis=1)print(astrology)birthdateanswerYEARMONTH-DAYmonthdayyearsign01970-03-31 51970 03-31march311970 aries11970-05-25 91970 05-25may251970 gemini21970-06-05 31970 06-05june51970 Gemini31970-08-28 21970 08-28august281970 virgo
Solution 2:
You can apply the zodiac_sign
function to the dataframe as -
import pandas as pd
from io import StringIO
# Sample
x = StringIO("""birthdate,answer,YEAR,MONTH-DAY
1970-03-31,5,1970,03-31
1970-05-25,9,1970,05-25
1970-06-05,3,1970,06-05
1970-08-28,2,1970,08-28
""")
df = pd.read_csv(x, sep=',')
df['birthdate'] = pd.to_datetime(df['birthdate'])
df['zodiac_sign'] = df['birthdate'].apply(lambda x: zodiac_sign(x.day, x.strftime("%B").lower()))
print(df)
Output:
birthdateanswerYEARMONTH-DAYzodiac_sign01970-03-31 51970 03-31aries11970-05-25 91970 05-25gemini21970-06-05 31970 06-05Gemini31970-08-28 21970 08-28virgo
Post a Comment for "Map Column Birthdates In Python Pandas Df To Astrology Signs"