【问题标题】:Assignment of coulmn by filtering dataframe通过过滤数据框分配列
【发布时间】:2020-05-10 00:15:18
【问题描述】:

如果country 的值为“US”,我想为特征country_US 分配一个特定的值1。这是我尝试过的两件事,但收到警告并且 X_test 也没有更新 country_US 功能。

X_test[X_test['country']=='US].loc[:,'country_US']=1

X_test.loc[X_test['country']=='US].loc[:,'country_US']=1

警告 -

C:\Users\DELL\Anaconda3\lib\site-packages\pandas\core\indexing.py:671: SettingWithCopyWarning: 正在尝试在 DataFrame 中的切片副本上设置值

请参阅文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy self._setitem_with_indexer(indexer, value)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    对于初学者来说,确实有多种方法可以做到这一点:

    import numpy as np
    #recomended:
    
    X_test['country_US']=np.where(X_test['country'].eq('US'), 1,0)
    
    #less recommended, yet working:
    
    X_test['country_US']=0
    X_test.loc[X_test['country'].eq('US'), 'country_US']=[1]
    

    【讨论】:

    • 谢谢。但是为什么我的代码不工作,即使使用loc 属性
    • 因为您尝试将值分配给数据帧的副本 - 如果您从 .loc[] 获取 .loc[],这就是您得到的结果
    【解决方案2】:

    除了 Grzegorz Skibinski 的建议之外,我想提一下

    X_test[X_test['country']=='US].loc[:,'country_US']=1
    

    这里似乎缺少一个分号。你也可以试试这个

    t=X_test[X_test['country']=='US'] #Returns a dataframe
    t['country_US']=1
    

    在这里,我使用了有助于我们轻松过滤的分区,因为老实说,单线让我感到困惑。 希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2022-12-05
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多