【发布时间】:2018-03-29 13:57:36
【问题描述】:
我有一个 pandas 数据框,其中包含连续数据和离散数据。我通过使用分层列索引以不同的方式处理它们,从而将连续数据与离散数据分开。
让我们假设以下数据框:
首先我正在构建一个分层索引,然后我可以在初始化空数据框时使用它。然后我用连续和离散数据填充示例数据框。
my_multiindex = pd.MultiIndex(levels=[['discrete', 'continuous'],[]],
labels=[[],[]],
names=['Datatype', 'Data'])
df = pd.DataFrame(columns=my_multiindex,index=pd.date_range('20180101 9:01:00',freq='s',periods=50))
df.loc[:,('continuous', 'data1')] = np.random.uniform(-50, 100, 50)
df.loc[:,('continuous', 'data2')] = np.random.uniform(-500, 800, 50)
df.loc[:,('continuous', 'data3')] = np.random.uniform(-300, 200, 50)
df.loc[:,('discrete', 'data4')] = np.random.randint(0, 2, 50)
df.loc[:,('discrete', 'data5')] = np.random.randint(0, 2, 50)
df.loc[:,('discrete', 'data6')] = np.random.randint(0, 2, 50)
生成的数据框如下所示:
Datatype continuous discrete
Data data1 data2 data3 data4 data5 data6
2018-01-01 09:01:00 -6.406635 208.992257 1.845863 0 1 0
2018-01-01 09:01:01 80.084693 264.907285 190.628975 0 0 0
2018-01-01 09:01:02 74.734951 -39.456532 -132.749219 0 1 0
2018-01-01 09:01:03 55.703297 413.700692 147.826342 1 0 0
2018-01-01 09:01:04 25.797465 -290.116077 -250.018855 0 0 1
然后我想使用 StandardScaler 来缩放数据框中的连续数据。我只是试图将离散数据复制到新的数据帧 df_scaled。
df_scaled = pd.DataFrame(columns=my_multiindex, index=df.index)
scaler = StandardScaler()
scaler.fit(df.loc[:,'continuous'])
df_scaled.loc[:,'discrete'] = df.loc[:,'discrete']
df_scaled.loc[:,'continuous'] = pd.DataFrame(scaler.transform(df.loc[:,'continuous']))
但是,这不起作用。运行后,新的数据帧 df_scaled 仍然为空。我做错了什么?
【问题讨论】:
标签: python pandas dataframe multi-index