+-
使用loc和使用方括号来过滤Pandas / Python中的列有什么区别?
我注意到在Pandas DataFrame中选择一个列的三种方法:

使用loc选择列的第一种方法:

df_new = df.loc[:, 'col1']

第二种方法 – 看起来更简单,更快捷:

df_new = df['col1']

第三种方法 – 最方便:

df_new = df.col1

这三种方法有区别吗?我不这么认为,在这种情况下我宁愿使用第三种方法.

我很好奇为什么似乎有三种方法可以做同样的事情.

最佳答案
在以下情况中,它们的行为相同:

>选择单个列(df [‘A’]与df.loc [:,’A’]相同 – >选择列A)
>选择列列表(df [[‘A’,’B’,’C’]]与df.loc [:,[‘A’,’B’,’C’]] – >相同选择A,B和C列)
>按行切片(df [1:3]与df.iloc [1:3]相同 – >选择第1行和第2行.但是,请注意,如果使用loc切片行而不是iloc,则会假设你有一个RandeIndex,得到第1,2和3行.详见here.)

但是,[]在以下情况下不起作用:

>您可以使用df.loc [row_label]选择单行
>您可以使用df.loc [[row_label1,row_label2]]选择行列表
>您可以使用df.loc [:,’A’:’C’]对列进行切片

这三个不能用[]来完成.
更重要的是,如果您的选择涉及行和列,则分配会出现问题.

df[1:3]['A'] = 5

这将选择第1行和第2行,然后选择返回对象的列“A”并为其指定值5.问题是,返回的对象可能是一个副本,因此这可能不会更改实际的DataFrame.这提高了SettingWithCopyWarning.这个任务的正确方法是

df.loc[1:3, 'A'] = 5

使用.loc,您可以保证修改原始DataFrame.它还允许您对列进行切片(df.loc [:,’C’:’F’]),选择单行(df.loc [5]),并选择行列表(df.loc [[1 ,2,5]]).

另请注意,这两个未同时包含在API中.稍后添加.loc作为更强大和明确的索引器.有关详细信息,请参见unutbu’s answer.

注意:使用[] vs获取列.是一个完全不同的话题. .只是为了方便.它只允许访问名称有效的Python标识符的列(即它们不能包含空格,它们不能由数字组成……).当名称与Series / DataFrame方法冲突时,不能使用它.它也不能用于不存在的列(即,如果没有列a,则赋值df.a = 1将不起作用).除此之外, .和[]是一样的.

点击查看更多相关文章

转载注明原文:使用loc和使用方括号来过滤Pandas / Python中的列有什么区别? - 乐贴网