[英]Rename Pandas DataFrame inside function does not work
我想实现此功能,以便使用新名称创建新列。 如果我逐行应用代码,则效果很好。 如果我运行该函数,则行lag.columns = [rename]不起作用。
怎么了?
T = [50, 48, 47, 49, 51, 53, 54, 52]
v1 = [1, 3, 2, 4, 5, 5, 6, 2]
v2 = [2, 5, 4, 2, 3, 1, 6, 9]
dataframe = pd.DataFrame({'T': T, 'v1': v1, 'v2': v2})
def timeseries_to_supervised(data, ts=1, dropnan=True):
'''
Helper function to convert a timeseries dataframe to supervised
The response must be placed as the first column
Arguments:
:data --> dataframe to transform into supervised
:timesteps --> number of timesteps we want to shift
Returns:
:final --> numpy array transformed
'''
# n_vars = 1 if type(data) is list else data.shape[1]
# y = data.loc[1]
# Create lags
for i, col in enumerate(list(data)):
name = col
rename = name + '(t-1)'
lag = pd.DataFrame(data.iloc[:, i]).shift(1)
lag.colums = [rename]
data = pd.concat([data, lag], axis=1)
return data
reframed = timeseries_to_supervised(dataframe, 1)
因此,它将返回带有新列的数据框,但列名不包括更改部分。
提前致谢!
这对我有用:
import pandas as pd
T = [50, 48, 47, 49, 51, 53, 54, 52]
v1 = [1, 3, 2, 4, 5, 5, 6, 2]
v2 = [2, 5, 4, 2, 3, 1, 6, 9]
dataframe = pd.DataFrame({'T': T, 'v1': v1, 'v2': v2})
def timeseries_to_supervised(data, ts=1, dropnan=True):
# n_vars = 1 if type(data) is list else data.shape[1]
# y = data.loc[1]
# Create lags
for i, col in enumerate(list(data)):
name = col
rename = name + '(t-1)'
lag = pd.DataFrame(data.iloc[:, i].shift(1).values, columns=[rename], index=data.index)
data = pd.concat([data, lag], axis=1)
return data
reframed = timeseries_to_supervised(dataframe, 1)
print reframed
只是更改了创建新滞后的方式。 这给了我:
T v1 v2 T(t-1) v1(t-1) v2(t-1)
0 50 1 2 NaN NaN NaN
1 48 3 5 50.0 1.0 2.0
2 47 2 4 48.0 3.0 5.0
3 49 4 2 47.0 2.0 4.0
4 51 5 3 49.0 4.0 2.0
5 53 5 1 51.0 5.0 3.0
6 54 6 6 53.0 5.0 1.0
7 52 2 9 54.0 6.0 6.0
您有错字:
lag.colums = [rename]
应该是:
lag.columns = [rename]
它为我工作,这是我的输出:
T v1 v2 T(t-1) v1(t-1) v2(t-1)
0 50 1 2 NaN NaN NaN
1 48 3 5 50.0 1.0 2.0
2 47 2 4 48.0 3.0 5.0
3 49 4 2 47.0 2.0 4.0
4 51 5 3 49.0 4.0 2.0
5 53 5 1 51.0 5.0 3.0
6 54 6 6 53.0 5.0 1.0
7 52 2 9 54.0 6.0 6.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.