Pandas Dataframe子集不能如期工作。

问题描述 投票:0回答:1

这个看似简单的练习却把我搞得晕头转向,我相信是一些简单的东西跳过了我的眼睛。

比方说,我有一个数据框架。

 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

但我又找回了原来的数据框,请协助。

我看了几个帖子,但似乎都没有用。

帖子的例子我看了。检查字符串是否在pandas的数据框中。

python string pandas if-statement subset
1个回答
0
投票

我认为你需要赋值回原值 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),而潘达斯做警告。


0
投票

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

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

0
投票

你甚至可以在一行中改变你的数据集。

datas = datas[datas['name']=='Mark']
© www.soinside.com 2019 - 2024. All rights reserved.