我有一个变量"年龄"以不同的年龄度量存储为字符串。例如:
Age = ("3 weeks" , "2 years" , "1 day", "4 weeks")
我感兴趣的是使用时间度量(weeks, years, day)
将变量转换为一个整数,表示字符串中的数字为一年的一小部分。换句话说,我希望将3周转换为相当于int形式的3/52。
关于如何在熊猫中做到这一点的任何建议?欣赏即将发布的任何建议。
中号
答案 0 :(得分:3)
import datetime as DT
import pandas as pd
import parsedatetime as pdt
today = DT.date.today()
def parse(x, p=pdt.Calendar()):
return DT.datetime(*p.parse(x, today.timetuple())[0][:6])
age = ("3 weeks" , "2 years" , "1 day", "4 weeks")
s = pd.Series(age)
s = s.map(parse) - today
s = s / pd.Timedelta(1, unit='Y')
print(s)
产量
0 0.057496
1 1.998672
2 0.002738
3 0.076661
dtype: float64
答案 1 :(得分:1)
这应该有效:
d = {"weeks":52,"years":1,"day":365}
[float(i.split(" ")[0])/d[i.split(" ")[1]] for i in Age]
请注意,这假设您的所有数据都是按空格分割的,并且您只有" day"在数据集中 - 如果你有"天"你必须把它添加到字典中。
答案 2 :(得分:0)
我认为,使用Python列表可以实现您的目标:
#function to convert each string to fraction in years
def word2time(strVal):
num,word = strVal.split()
num = int(num)
if word == 'weeks' or word == 'week':
return float(num)/52
elif word == 'days' or word == 'day':
return float(num)/365
elif word == 'years' or word == 'year':
return num
#demonstration on the input you provided
Age = ['3 weeks', '2 years', '1 day', '4 weeks']
ageInYrs = []
for strVal in Age:
ageInYrs.append(word2time(strVal))
print ageInYrs