Python:将列重新分配给DataFrame时出现问题

7gcisfzg  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(128)

我有一个包含多列的DataFrame。我正在尝试规范化所有列,除了price列。
我找到了一段代码,它在我创建的示例DataFrame上可以完美地工作,但是当我在原始DataFrame上使用它时,它给出了错误ValueError: Columns must be same length as key
下面是我使用的代码:

df_final_1d_normalized = df_final_1d.copy()

cols_to_norm = df_final_1d.columns[df_final_1d.columns!='price']
df_final_1d_normalized[cols_to_norm] = df_final_1d_normalized[cols_to_norm].apply(lambda x: (x - x.min()) / (x.max() - x.min()))

问题是在第三行代码中将列重新分配给它们自己。
具体地说,这是df_final_1d_normalized[cols_to_norm].apply(lambda x: (x - x.min()) / (x.max() - x.min()))
但是,这不起作用df_final_1d_normalized[cols_to_norm] = df_final_1d_normalized[cols_to_norm].apply(lambda x: (x - x.min()) / (x.max() - x.min()))
下面是一个示例 Dataframe ,如果您想测试它,看看它是否真的可以在其他 Dataframe 上工作

df  = pd.DataFrame()
df['A'] = [1,2,3,4, np.nan, np.nan]
df['B'] = [2,4,2,4,5,np.nan]
df['C'] = [np.nan, np.nan, 4,5,6,3]
df['D'] = [np.nan, np.nan, np.nan, 5,4,9]

df_norm = df.copy()
cols_to_norm = df.columns[df.columns!="D"]
df_norm[cols_to_norm] = df_norm[cols_to_norm].apply(lambda x: (x - x.min()) / (x.max() - x.min()))

会是什么错误呢?

o4hqfura

o4hqfura1#

如果我没理解错的话,你不需要lambda函数,你可以写:

df_final_1d_normalized[cols_to_norm] = (df_final_1d_normalized[cols_to_norm] - df_final_1d_normalized[cols_to_norm].min())/(df_final_1d_normalized[cols_to_norm].max() - df_final_1d_normalized[cols_to_norm].min())

这就行了。
下面是问题中的示例:

df  = pd.DataFrame()
df['A'] = [1,2,3,4, np.nan, np.nan]
df['B'] = [2,4,2,4,5,np.nan]
df['C'] = [np.nan, np.nan, 4,5,6,3]
df['D'] = [np.nan, np.nan, np.nan, 5,4,9]

df_norm = df.copy()
cols_to_norm = df.columns[df.columns!="D"]
df_norm[cols_to_norm] = (df_norm[cols_to_norm] - df_norm[cols_to_norm].min()) / (df_norm[cols_to_norm].max() - df_norm[cols_to_norm].min())
df_norm

结果是:

A           B           C           D
0   0.000000    0.000000    NaN         NaN
1   0.333333    0.666667    NaN         NaN
2   0.666667    0.000000    0.333333    NaN
3   1.000000    0.666667    0.666667    5.0
4   NaN         1.000000    1.000000    4.0
5   NaN         NaN         0.000000    9.0

相关问题