Pandas系列中的字符串操作

时间:2016-05-18 17:23:30

标签: python string pandas

我有一个变量"年龄"以不同的年龄度量存储为字符串。例如:

Age = ("3 weeks" , "2 years" , "1 day", "4 weeks")

我感兴趣的是使用时间度量(weeks, years, day)将变量转换为一个整数,表示字符串中的数字为一年的一小部分。换句话说,我希望将3周转换为相当于int形式的3/52。

关于如何在熊猫中做到这一点的任何建议?欣赏即将发布的任何建议。

中号

3 个答案:

答案 0 :(得分:3)

使用parsedatetime

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