答案 0 :(得分:1)
您的错误是第2行。df['intage'] = int(df['age'])
无效,您无法将pandas系列传递给int函数。
如果df ['age']是对象dtype,则需要使用astype
。
df['intage'] = df['age'].astype(int)
或者因为要减去两个日期,所以需要使用带有days属性的dt访问器来获取天数作为整数
df['intage'] = df['age'].dt.days
答案 1 :(得分:0)
由于dtype
是timedelta64[ns]
,因此您可以在之间指定两个timedeltas
作为端点,也可以先使用numpy
将日期转换为数字类型
import pandas as pd
import numpy as np
df = pd.DataFrame({'age': [83, 108, 83, 63, 81]})
df['age'] = pd.to_timedelta(df.age, unit='days')
找到82到107天之间的日期:
df[df.age.between(pd.to_timedelta(82, unit='days'), pd.to_timedelta(107, unit='days'))]
# age
#0 83 days
#2 83 days
使用numpy
df[(df.age/np.timedelta64(1, 'D')).between(82, 107)]
# age
#0 83 days
#2 83 days
答案 2 :(得分:0)
一种解决方案是从timedelta
列中的age
变量中提取日期。
在下面的玩具示例中,您可以看到如何实现这一目标:
import pandas as pd
import datetime
from datetime import timedelta as td
# Create example DataFrame
df = pd.DataFrame([td(83),td(108),td(83),td(63),td(81)], columns=["age"])
print df
# Get days from timedeltas
df.age = df.age.apply(lambda x: x.days)
print df
# Filter ages
df = df[df.age.between(91,1956, inclusive=True)]
print df
打印结果如下:
>>>
age
0 83 days
1 108 days
2 83 days
3 63 days
4 81 days
age
0 83
1 108
2 83
3 63
4 81
age
1 108