pandas - 熊猫用数据框替换问题
问题描述
我通过从 csv 读取它来创建一个数据框。我过滤了时间戳并得到了一个新的数据帧副本,试图在新的数据帧中替换 2019 年到 2018 年,但它不起作用。为什么?
ranks = pd.read_csv("/tmp_file.csv")
print(ranks)
mask=(ranks["Date/Time"] > pd.Timestamp(start_time)) & (ranks["Date/Time"] < pd.Timestamp(end_time)) & (ranks["Op/sc"]>100)
df = ranks.loc[mask]
print(df)
df.replace(regex=r'2019.*$', value='2018', inplace=True)
print(df)
排名:
Date/Time Rank Op/sc
0 2019-03-18 03:07:57 0 6
1 2019-03-18 03:08:12 0 5
2 2019-03-18 03:08:27 0 4
3 2019-03-18 03:08:42 0 4
4 2019-03-18 03:08:57 0 7
df
Date/Time Rank Op/sc
25 2019-03-18 03:14:12 0 160
26 2019-03-18 03:14:27 0 103
27 2019-03-18 03:14:42 0 129
32 2019-03-18 03:15:57 0 119
替换后的df
Date/Time Rank Op/sc
25 2019-03-18 03:14:12 0 160
26 2019-03-18 03:14:27 0 103
27 2019-03-18 03:14:42 0 129
32 2019-03-18 03:15:57 0 119
解决方案
您需要Date/Time
先将列转换为日期时间:
ranks = pd.read_csv("/tmp_file.csv", parse_dates=['Date/Time'])
然后将字符串转换为Timestamps
不必要的:
mask=(ranks["Date/Time"] > start_time) & (ranks["Date/Time"] < end_time) & (ranks["Op/sc"]>100)
df = ranks[mask].copy()
最后更换年份2019
使用2018
:
mask1 = df["Date/Time"].dt.year == 2019
df.loc[mask1, "Date/Time"] = df.loc[mask1, "Date/Time"] - pd.offsets.DateOffset(years=1)
如果所有年份2019
都不需要过滤:
df["Date/Time"] = df["Date/Time"] - pd.offsets.DateOffset(years=1)
编辑:
mask1 = df["Date/Time"].dt.year == 2019
df.loc[mask1, "Date/Time"] = df.loc[mask1, "Date/Time"].iat[0]
推荐阅读
- winforms - 'google' 是 IE11 中的未定义错误
- javascript - 如何删除之前在 Fabric 中添加的矩形对象?
- curl - WSO2 身份服务器 - 如何为 OTP 重置密码
- https - 我的网站被防火墙阻止
- javascript - 邮递员:测试抛出断言错误`expected null to deeply equal undefined`
- javascript - Speech to Text Chrome webkit with Java Script - 如何在特殊关键字上进行控制台登录?
- go - 与一对多的无效关联
- ssrs-2012 - SSRS - 百分比总和不完全匹配 100%
- apache-camel - 在 camel exec 中正确使用参数
- python - 散景更新 vbar 数据源