熊猫用数据框替换问题

时间:2019-07-17 05:07:20

标签: 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

1 个答案:

答案 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()

最后一次替换年份20192018使用:

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]