首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解loc命令

理解loc命令
EN

Stack Overflow用户
提问于 2022-08-30 06:54:36
回答 1查看 53关注 0票数 1

我有以下命令,但我不完全理解

代码语言:javascript
复制
def func1(df):
    df.loc[df['First Name'].isin(['n.a.', 'null']),
            df.columns.drop(["Last Name", "Middle Name", "First Name"])] = "n.a."

    return df

我编写了下面的dataframe来测试它返回的内容

代码语言:javascript
复制
    df1 = pd.DataFrame({"First Name": ['Alex', 'n.a.', 'null'],
                        "Last Name": ['Peterson', 'Doe', 8],
                        "Middle Name": ['John', 'Jack', 3],
                         "Pet": [2, 9, 3]})

如果我理解正确,它会检查列‘Name’如果值是'n.a.‘还是“null”,然后删除除“姓”、“中间名”、“名名”以外的所有其他列?但是,什么是等于n.a。在最后?通过在前面提到的dataframe上运行函数,它基本上返回相同的dataframe,而不更改任何内容。由于这个原因,我试图拆分函数,以单独检查它。

代码语言:javascript
复制
def func2(df):
    df.loc[df['First Name'].isin(['n.a.', 'null'])] = "n.a."
    return df

使用相同的dataframe进行了尝试,我注意到对于具有n.a的行。或者在第一个名称中为null,它将其他元素转换为n.a。为什么我的dataframe不对func1进行相同的更改?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-30 07:02:55

首先,提供的DataFrame无效,所有列表都必须具有相同的长度。

让我们使用:

代码语言:javascript
复制
df1 = pd.DataFrame({"First Name": ['Alex', 'n.a.', 'null'],
                    "Last Name": ['Peterson', 'Doe', 8],
                    "Middle Name": ['John', 'Jack', 3],
                    "Pet": [2, 9, 3]}) # removed 2 values

现在,函数选择了“名字”为['n.a.', 'null']的所有行和所有非["Last Name", "Middle Name", "First Name"]的列。这给我们留下了一行1/2和列“宠物”。赋值使它们成为"n.a.",实际上输出是:

代码语言:javascript
复制
  First Name Last Name Middle Name   Pet
0       Alex  Peterson        John     2
1       n.a.       Doe        Jack  n.a. # this value was updated
2       null         8           3  n.a. # this value was updated
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73538299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档