【发布时间】:2022-11-24 02:09:36
【问题描述】:
我有一个包含 N 列的数据框,其中 N 可能为 0。我有一个标量值列表,其长度与数据框中的列列表相同。我想将数据框的列乘以或除以列表中的相应值。
例如。
Dataframe
1 2 3
1 1 2 3
2 4 5 6
3 7 8 9
Multipliers
0 1 2
Expected
1 2 3
1 0 2 6
2 0 5 12
3 0 8 18
让我们创建数据
# Empty
df_1 = pd.DataFrame({}, index=idx)
list_1 = []
series_1 = pd.Series(list_1, dtype=float)
# Not empty (1 element to shorten example)
df_2 = pd.DataFrame({1: [1]}, index=idx)
list_2 = [12]
series_2 = pd.Series(list_2, dtype=float)
当我将乘数作为列表传递时,它按预期工作
df_2.mul(list_2)
1
1 12
但是,如果列表为空,我会收到警告
df_1.mul(list_1, axis=1)
<stdin>:1: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
Empty DataFrame
Columns: []
Index: [1]
所以我试图将列表作为一个系列传递。当系列为空时我没有收到任何警告
df_1.mul(series_1, axis=1)
Empty DataFrame
Columns: []
Index: [1]
但这显然不是正确的做法,因为在传递系列时,系列索引与列名匹配。
df_2.mul(series_2)
0 1
1 NaN NaN
我想依赖列顺序,就像列表一样。
我怎样才能做到这一点?我对清单没意见。我只想面向未来,所以我想摆脱警告。
【问题讨论】: