numpy 如何写得更好或按照PEP8风格

bgtovc5b  于 2023-04-30  发布在  其他
关注(0)|答案(3)|浏览(85)

我有很多列,我想用零替换null。有没有什么方法可以写得更好,或者如何设置换行符或缩进,使其更具可读性?

df[["column1", "column2", "column3", "column4", "column5", "column6", "column7", "column8", "column9", "column10", "column11", "column12"]] = np.where(dfdf[["column1", "column2", "column3", "column4", "column5", "column6", "column7", "column8", "column9", "column10", "column11", "column12"]].isnull(), 0, 1)
up9lanfz

up9lanfz1#

要添加drawbu answer,在这种情况下,我会尝试通过使用来提高可读性:

columns_to_filter = [
    "column1", "column2", "column3", "column4", "column5", "column6", 
    "column7", "column8", "column9", "column10", "column11", "column12"
]

df[columns_to_filter] = np.where(dfdf[columns_to_filter].isnull(), 0, 1)
gcmastyq

gcmastyq2#

你可以这样做:

df[[
    "column1", "column2", "column3", "column4", "column5", "column6", 
    "column7", "column8", "column9", "column10", "column11", "column12"
]] = np.where(
    dfdf[[
        "column1", "column2", "column3", "column4", "column5", "column6", 
        "column7", "column8", "column9", "column10", "column11", "column12"
    ]].isnull(), 
    0, 
    1
)

它不是完美的,但可读性更强,并遵循PEP8风格。如果超过80个字符,请拆分行(有些人更喜欢120个字符,您可以选择)。如果你为调用的一个参数做这个操作,请考虑为所有参数做这个操作,以免造成一些不规则性。

pzfprimi

pzfprimi3#

如果您使用pandas,您可以使用filter来选择要修改的列的子集。在简单的情况下,您还可以使用列表解析。
而不是isnull + np.where,我会选择notna + astype(int)

import pandas as pd

df = ... # Your df here

# Solution:
cols = [ f"column{i}" for i in range(1, 13) ]
df[cols] = df[cols].notna().astype(int)

相关问题