我通过从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
答案 0 :(得分:0)
您首先需要将列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]