【问题标题】:Passing a list to pandas loc method将列表传递给 pandas loc 方法
【发布时间】:2020-11-14 17:03:12
【问题描述】:

我想更改 pandas 数据框中某些列的值。但如果我在loc 中传递列列表,我似乎无法做到。

df = pd.DataFrame({
"ID" : [1, 2, 3, 4, 5],
"QA_needed" : [0, 1, 1, 0, 1],
"QC_needed" : [1, 0, 1, 0, 0],
"Report_needed" : [1, 1, 1, 0, 1]
})

df.loc[:, ["QA_needed", "Report_needed"]].replace({1: "True", 0: "False"}, inplace=True)

为此,我必须单独替换每列的值

df.loc[:, "QA_needed"].replace({1: "True", 0: "False"}, inplace=True)
df.loc[:, "QC_needed"].replace({1: "True", 0: "False"}, inplace=True)

有没有办法将列表["QA_needed", "Report_needed"] 传递给loc 方法?

【问题讨论】:

    标签: python pandas dataframe pandas-loc


    【解决方案1】:

    试试update

    df.update(df.loc[:, ["QA_needed", "Report_needed"]].replace({1: "True", 0: "False"}))
    df
    Out[96]: 
       ID QA_needed  QC_needed Report_needed
    0   1     False          1          True
    1   2      True          0          True
    2   3      True          1          True
    3   4     False          0         False
    4   5      True          0          True
    

    【讨论】:

    • 感谢您的回复。这很有帮助。出于好奇,为什么当inplace设置为True时这个更新方法会失败?
    • @Diego 因为更新已经是inplace检查文档
    【解决方案2】:

    你也可以分配一个布尔值(bool):

    df = df.assign(**df[['QA_needed','Report_needed']].astype(bool))
    

       ID  QA_needed  QC_needed  Report_needed
    0   1      False          1           True
    1   2       True          0           True
    2   3       True          1           True
    3   4      False          0          False
    4   5       True          0           True
    

    【讨论】:

    • 这似乎可以解决问题,但我并不总是需要更新布尔值。你能解释一下为什么我需要一个双星号吗?
    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2018-10-18
    • 2012-11-19
    • 2017-02-28
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多