Pandas 将问题替换为数据帧

Pandas 将问题替换为数据帧,pandas,Pandas,我通过从csv读取数据帧来创建数据帧。我过滤了时间戳,得到了一个新的dataframe副本,试图用新的dataframe替换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)) &am

我通过从csv读取数据帧来创建数据帧。我过滤了时间戳,得到了一个新的dataframe副本,试图用新的dataframe替换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)
df

更换后的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

您需要先将列
日期/时间
转换为日期时间:

ranks = pd.read_csv("/tmp_file.csv", parse_dates=['Date/Time'])
然后,不需要将字符串转换为
时间戳

mask=(ranks["Date/Time"] > start_time) & (ranks["Date/Time"] < end_time) & (ranks["Op/sc"]>100)
df = ranks[mask].copy()
df["Date/Time"] = df["Date/Time"] - pd.offsets.DateOffset(years=1)
如果所有年份均为
2019
则无需过滤:

mask=(ranks["Date/Time"] > start_time) & (ranks["Date/Time"] < end_time) & (ranks["Op/sc"]>100)
df = ranks[mask].copy()
df["Date/Time"] = df["Date/Time"] - pd.offsets.DateOffset(years=1)
编辑:


您需要先将列
日期/时间
转换为日期时间:

ranks = pd.read_csv("/tmp_file.csv", parse_dates=['Date/Time'])
然后,不需要将字符串转换为
时间戳

mask=(ranks["Date/Time"] > start_time) & (ranks["Date/Time"] < end_time) & (ranks["Op/sc"]>100)
df = ranks[mask].copy()
df["Date/Time"] = df["Date/Time"] - pd.offsets.DateOffset(years=1)
如果所有年份均为
2019
则无需过滤:

mask=(ranks["Date/Time"] > start_time) & (ranks["Date/Time"] < end_time) & (ranks["Op/sc"]>100)
df = ranks[mask].copy()
df["Date/Time"] = df["Date/Time"] - pd.offsets.DateOffset(years=1)
编辑:


try:df['Date/Time']=df['Date/Time']+pd.DateOffset(years=1)@GustavoGradvohl-我想Op需要减法,答案被编辑了。谢谢你的想法。对不起,我想我误导了你,我的目的是将时间戳列替换为一个特定的列。@Ping-你能解释更多吗?您是否需要将所有datetimwes替换为年份
2019
到值
2018
?比如
mask1=df[“日期/时间”].dt.year==2019
df.loc[mask1,“日期/时间”]=2018
?但随后会得到混合值-datetimes和integers@Ping-是的,这是预期的,因为您的代码将替换字符串,而不是日期时间。try:df['Date/Time']=df['Date/Time']+pd.DateOffset(years=1)@GustavoGradvohl-我认为Op需要减法,答案已编辑。谢谢你的想法。对不起,我想我误导了你,我的目的是将时间戳列替换为一个特定的列。@Ping-你能解释更多吗?您是否需要将所有datetimwes替换为年份
2019
到值
2018
?比如
mask1=df[“日期/时间”].dt.year==2019
df.loc[mask1,“日期/时间”]=2018
?但随后会得到混合值-datetimes和integers@Ping-是的,这是预期的,因为您的代码将替换字符串,而不是日期时间。