Pandas 将问题替换为数据帧
我通过从csv读取数据帧来创建数据帧。我过滤了时间戳,得到了一个新的dataframe副本,试图用新的dataframe替换2019年到2018年,但它不起作用。为什么?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
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-是的,这是预期的,因为您的代码将替换字符串,而不是日期时间。