如何更改重采样列的名称?
How do I change the name of a resampled column?
我有一个包含纳斯达克股票指数每分钟价格波动的数据框。
在交易中,重要的是要考虑不同时间单位的数据(了解短期、中期和长期趋势...)
所以我使用了Pandas的resample()方法,在原来1分钟的基础上,又用了5分钟得到了一个带有价格的dataframe:
df1m = pd.DataFrame({
'Time' : ['2022-01-11 09:30:00', '2022-01-11 09:31:00', '2022-01-11 09:32:00', '2022-01-11 09:33:00', '2022-01-11 09:34:00', '2022-01-11 09:35:00', '2022-01-11 09:36:00' , '2022-01-11 09:37:00' , '2022-01-11 09:38:00' ,
'2022-01-11 09:39:00', '2022-01-11 09:40:00'],
'Price' : [1,2,3,4,5,6,7,8,9,10,11]})
df1m['Time'] = pd.to_datetime(df1m['Time'])
df1m.set_index(['Time'], inplace =True)
df5m = df1m.resample('5min').first()
我将列名重命名为 5min :
df5m.rename(columns={'Price' : 'Price5'})
不幸的是,将两个数据帧(1 分钟和 5 分钟)放在一起时,不再考虑列名的更改:
df_1m_5m = pd.concat([df1m, df5m], axis=1)
如何明确重命名为 5 分钟数据创建的列,并避免为不同的数据使用两次相同的列名?
您可以使用:
df5m = df1m.resample('5min').first().add_suffix('5')
df_1m_5m = pd.concat([df1m, df5m], axis=1)
输出:
>>> df_1m_5m
Price Price5
Time
2022-01-11 09:30:00 1 1.0
2022-01-11 09:31:00 2 NaN
2022-01-11 09:32:00 3 NaN
2022-01-11 09:33:00 4 NaN
2022-01-11 09:34:00 5 NaN
2022-01-11 09:35:00 6 6.0
2022-01-11 09:36:00 7 NaN
2022-01-11 09:37:00 8 NaN
2022-01-11 09:38:00 9 NaN
2022-01-11 09:39:00 10 NaN
2022-01-11 09:40:00 11 11.0
您忘记将结果重新分配给您的数据框:
df5m = df5m.rename(columns={'Price' : 'Price5'})
# OR
df5m.rename(columns={'Price' : 'Price5'}, inplace=True)
输出:
>>> df5m
Price5
Time
2022-01-11 09:30:00 1
2022-01-11 09:35:00 6
2022-01-11 09:40:00 11
相信您的问题是您在重命名中缺少选项 inplace=true
。默认情况下它是 false,因此它会生成 DataFrame 的副本而不是编辑现有的 DataFrame。将其设置为 true 将编辑您现有的 DataFrame df5m
df5m.rename(columns={'Price' : 'Price5'},inplace=True)
df_1m_5m 的输出:
Price Price5
Time
2022-01-11 09:30:00 1 1.0
2022-01-11 09:31:00 2 NaN
2022-01-11 09:32:00 3 NaN
2022-01-11 09:33:00 4 NaN
2022-01-11 09:34:00 5 NaN
2022-01-11 09:35:00 6 6.0
2022-01-11 09:36:00 7 NaN
2022-01-11 09:37:00 8 NaN
2022-01-11 09:38:00 9 NaN
2022-01-11 09:39:00 10 NaN
2022-01-11 09:40:00 11 11.0
同意 Stephan 和 Corralien 的观点。你也可以试试这个:
df1m['Price5'] = df1m.resample('5T').first()
我有一个包含纳斯达克股票指数每分钟价格波动的数据框。 在交易中,重要的是要考虑不同时间单位的数据(了解短期、中期和长期趋势...)
所以我使用了Pandas的resample()方法,在原来1分钟的基础上,又用了5分钟得到了一个带有价格的dataframe:
df1m = pd.DataFrame({
'Time' : ['2022-01-11 09:30:00', '2022-01-11 09:31:00', '2022-01-11 09:32:00', '2022-01-11 09:33:00', '2022-01-11 09:34:00', '2022-01-11 09:35:00', '2022-01-11 09:36:00' , '2022-01-11 09:37:00' , '2022-01-11 09:38:00' ,
'2022-01-11 09:39:00', '2022-01-11 09:40:00'],
'Price' : [1,2,3,4,5,6,7,8,9,10,11]})
df1m['Time'] = pd.to_datetime(df1m['Time'])
df1m.set_index(['Time'], inplace =True)
df5m = df1m.resample('5min').first()
我将列名重命名为 5min :
df5m.rename(columns={'Price' : 'Price5'})
不幸的是,将两个数据帧(1 分钟和 5 分钟)放在一起时,不再考虑列名的更改:
df_1m_5m = pd.concat([df1m, df5m], axis=1)
如何明确重命名为 5 分钟数据创建的列,并避免为不同的数据使用两次相同的列名?
您可以使用:
df5m = df1m.resample('5min').first().add_suffix('5')
df_1m_5m = pd.concat([df1m, df5m], axis=1)
输出:
>>> df_1m_5m
Price Price5
Time
2022-01-11 09:30:00 1 1.0
2022-01-11 09:31:00 2 NaN
2022-01-11 09:32:00 3 NaN
2022-01-11 09:33:00 4 NaN
2022-01-11 09:34:00 5 NaN
2022-01-11 09:35:00 6 6.0
2022-01-11 09:36:00 7 NaN
2022-01-11 09:37:00 8 NaN
2022-01-11 09:38:00 9 NaN
2022-01-11 09:39:00 10 NaN
2022-01-11 09:40:00 11 11.0
您忘记将结果重新分配给您的数据框:
df5m = df5m.rename(columns={'Price' : 'Price5'})
# OR
df5m.rename(columns={'Price' : 'Price5'}, inplace=True)
输出:
>>> df5m
Price5
Time
2022-01-11 09:30:00 1
2022-01-11 09:35:00 6
2022-01-11 09:40:00 11
相信您的问题是您在重命名中缺少选项 inplace=true
。默认情况下它是 false,因此它会生成 DataFrame 的副本而不是编辑现有的 DataFrame。将其设置为 true 将编辑您现有的 DataFrame df5m
df5m.rename(columns={'Price' : 'Price5'},inplace=True)
df_1m_5m 的输出:
Price Price5
Time
2022-01-11 09:30:00 1 1.0
2022-01-11 09:31:00 2 NaN
2022-01-11 09:32:00 3 NaN
2022-01-11 09:33:00 4 NaN
2022-01-11 09:34:00 5 NaN
2022-01-11 09:35:00 6 6.0
2022-01-11 09:36:00 7 NaN
2022-01-11 09:37:00 8 NaN
2022-01-11 09:38:00 9 NaN
2022-01-11 09:39:00 10 NaN
2022-01-11 09:40:00 11 11.0
同意 Stephan 和 Corralien 的观点。你也可以试试这个:
df1m['Price5'] = df1m.resample('5T').first()