【问题标题】:Pandas: How to work with sliced data using .loc?Pandas:如何使用 .loc 处理切片数据?
【发布时间】:2020-11-25 23:03:52
【问题描述】:
df1 = pd.DataFrame({'id_imp': ['a', 'b', 
'c','d','e','f','g'], 
'name': ['jon', 'jon', 'tom', 'ber', 'gary','gary', 
'zul'],
'state' : ['ca', 'ny', 'tn','ca','tn','tn','il'],
'county': ['wood','wood','fair','bridge','rosewelt','rosewelt','lili']})

df2 = pd.DataFrame({'id_sal': ['h', 'i', 'j','k','l'], 
 'name': ['jon', 'zolie', 'tom', 'ber', 'gary'],
'state' : ['ca', 'ch', 'tn','ca','tn'],
'county': ['wood','plas','fair','bridge','rosewelt']})

df3 = df1.loc[(~df1.name.isin(df2.name))]

我正在尝试通过编写以下代码来进行小操作,但它给了我一个警告:可能是什么问题?

df3['name'] = df3.loc[:, 'name'].fillna(0)

SettingWithCopyWarning:尝试改用 .loc[row_indexer,col_indexer] = value

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    看起来像:

    df['name'] - 返回一个全新的对象,即一个副本

    但您想使用原始对象。所以使用:

    df3.loc[:, 'name'] - 返回原始对象的子集,即视图

    df3.loc[:, 'name'] = df3['name'].fillna(0)
    

    如果您尝试在同一行代码中选择行和列,.loc[] 效果会更好。

    【讨论】:

    • 不,我的朋友。它给了我同样的警告。
    • 我已经发布了数据框。请在您的控制台中尝试并检查。它会给出同样的警告。
    • 我已经运行了你的代码。将df3['name'] = df3.loc[:, 'name'].fillna(0) 更改为df3.loc[:, 'name'] = df3['name'].fillna(0)
    • 我收到此警告。正在尝试在 DataFrame 中的切片副本上设置一个值。尝试改用 .loc[row_indexer,col_indexer] = value
    • 我不确定。可能是因为我们有不同版本的 Pandas。我的是1.0.0。但是您确定您从作业右侧删除了 .loc[] 吗?
    猜你喜欢
    • 2021-08-01
    • 2020-05-16
    • 1970-01-01
    • 2018-09-07
    • 2021-08-12
    • 2022-08-09
    • 2016-04-02
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多