【问题标题】:Pandas Dataframe subset not working as expectedPandas Dataframe 子集未按预期工作
【发布时间】:2020-05-13 09:50:20
【问题描述】:

这个看似简单的练习让我迷失了方向,我敢肯定这是简单的跳过我的眼睛。

假设我有一个数据框

 datas = pd.DataFrame({'age':[10,20,30],
                          'name':['John','Mark','Lisa']})

我现在想按名称“Mark”对数据框进行子集化,所以我这样做了:

    if (datas['name']=='Mark').any():
        datas.loc[datas['name'] == 'Mark']
    else:
        print('no')

预期结果是

age name
20  Mark

但我又找回了原始数据帧,请协助。

我查看了几篇帖子,但似乎没有任何帮助。

我查看的帖子示例:Check if string is in a pandas dataframe

【问题讨论】:

    标签: python string pandas if-statement subset


    【解决方案1】:

    如果需要按子集覆盖原始DataFrame,我认为您需要分配回原始DataFrame

    datas = datas.loc[datas['name'] == 'Mark']
    

    或分配给新变量,例如df1:

    df1 = datas.loc[datas['name'] == 'Mark']
    

    接下来,如果需要进行数据处理并将 putput 分配给 df1 等新变量,则需要使用 DataFrame.copy 来防止 SettingWithCopyWarning

    df1 = datas.loc[datas['name'] == 'Mark'].copy()
    

    如果您稍后修改 df1 中的值,您会发现修改不会传播回原始数据 (df),并且 Pandas 会发出警告。

    【讨论】:

      【解决方案2】:

      您是要打印子集吗?现在你的代码没有改变任何东西。

      if (datas['name']=='Mark').any():
          print( datas.loc[datas['name'] == 'Mark'] )
      else:
          print('no')
      

      【讨论】:

        【解决方案3】:

        您甚至可以在一行中更改数据集:

        datas = datas[datas['name']=='Mark']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-30
          • 2022-01-13
          • 1970-01-01
          相关资源
          最近更新 更多