使用标量运算时如何使用 Dataframe 进行列表理解?

How to do list comprehension with Dataframe when using scalar operation?

我有一个数据帧列表。所有数据帧的 dtype 都是 <date, int>。我只想将 100 乘以 int 列。所以我做了 -

dfs = [df1, df2, ...]
dfs = [df.select_dtypes(include=['number']) * 100 for df in dfs]

这是从每个数据框中删除第一列。如何保持完整?

这是因为 select_dtypes only return a subset of the DataFrame’s 列基于列数据类型。我能想到的最简单的方法是排除 number dtypes 以获取剩余的列并将其合并以获取原始 DataFrame。

[
    pd.concat(
        [
            df.select_dtypes(include=["number"]) * 100,
            df.select_dtypes(exclude=["number"]),
        ],
        axis=1,
    )
    for df in dfs
]

对于这种情况,最好使用 for 循环来更改数据帧。

for i in range(len(dfs)):
    dfs[i].select_dtypes(include=['number']) = dfs[i].select_dtypes(include=['number']) * 100

列表理解的问题在于您只选择了 RHS 上具有 dtype 'number' 的列,因此这就是您的代码将值分配给的列。如果你真的想使用列表理解,那么你可以使用这样的东西:

    dfs = [pd.concat([
            select_dtypes(exclude=['number']),
            select_dtypes(include=['number']) * 100
        ], axis=1) for df in dfs]