python - 用时间戳格式的变量替换熊猫数据帧上的年份
问题描述
我df
使用以下代码创建了以下内容:
df = pd.read_table('https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/06_Stats/Wind_Stats/wind.data', sep = "\s+", parse_dates = [[0,1,2]])
如果我们运行以下命令:
type(df['Yr_Mo_Dy'][0])
我们将看到下面的观察['Yr_Mo_Dy']
是有pandas._libs.tslibs.timestamps.Timestamp
格式的。
我要做的是:每当我看到一年> = 2061(['Yr_Mo_Dy']
)时,我想减去-100,否则我只保留年份并继续迭代。
我尝试了以下代码:
for i in list(range(df.shape[0])):
# assign all the observations under df['Yr_Mo_Dy'] to ts
ts = df['Yr_Mo_Dy'][i]
if df['Yr_Mo_Dy'][i].year >=2061:
# replace the year in ts by year - 100
ts.replace(year=df['Yr_Mo_Dy'][i].year - 100)
else:
continue
但是循环什么也不做。我觉得这与变量赋值有关ts = df['Yr_Mo_Dy'][i]
。但我想不出另一种方法来完成这项工作。
考虑到我在这篇文章中看到的答案,我试图在每次循环迭代后分配一个变量。
解决方案
您应该旨在避免可矢量化操作的手动循环。
在这种情况下,您可以使用numpy.where
创建条件系列:
df = pd.DataFrame({'A': pd.to_datetime(['2018-01-01', '2080-11-30',
'1955-04-05', '2075-10-09'])})
df['B'] = np.where(df['A'].dt.year >= 2061,
df['A'] - pd.DateOffset(years=100), df['A'])
print(df)
A B
0 2018-01-01 2018-01-01
1 2080-11-30 1980-11-30
2 1955-04-05 1955-04-05
3 2075-10-09 1975-10-09
推荐阅读
- c - 关于如何为 Linux 字符设备驱动程序设置文件操作的困惑
- java - 在 Windows 上使用 cmd 运行文件
- amazon-web-services - aws ec2 实例和弹性云部署之间的隧道
- redis - 我应该创建多个hiredis对象吗?
- gdb - gdb 运行时错误:找不到文件,溢出错误:int 太大而无法转换
- java - 删除生产服务器中的 MaxMetaspaceSize ("-XX:MaxMetaspaceSize=1g") 参数导致另一个错误:堆内存不足错误
- flutter - 如何在中间渲染gridviewbuilder的最后一个元素
- ios - Safari 网络检查器仅显示源、控制台和审核
- reactjs - 如何使用 firebasestorage href 创建 blob creatObjectURL
- javascript - 将联合查询聚合到数组中