使用标量运算时如何使用 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]
我有一个数据帧列表。所有数据帧的 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]