Data Science

Pandas 高效多列选择:DataFrame 进阶技巧

Spread the love

Pandas是一个强大的Python库,用于数据操作和分析。一个常见的任务是从DataFrame中选择特定的列。本文探讨了选择多列的高效且清晰的方法,并重点介绍了最佳实践。

目录:

使用GetItem语法

最简单的方法是使用GetItem ([]) 语法。提供一个列名列表来选择这些列。


import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9], 'col4': [10, 11, 12]}
df = pd.DataFrame(data)

# 选择'col1','col3'和'col4'
selected_columns = ['col1', 'col3', 'col4']
selected_df = df[selected_columns]
print(selected_df)

这简洁易读,但要确保DataFrame中存在所有列出的列;否则,会发生KeyError

使用iloc()

iloc()使用基于整数的索引。通过提供列的整数位置列表来选择列(记住Python使用基于零的索引)。


import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9], 'col4': [10, 11, 12]}
df = pd.DataFrame(data)

# 选择索引为0、2和3的列
selected_df = df.iloc[:, [0, 2, 3]]  # : 选择所有行,[0, 2, 3] 选择第0、2和3列
print(selected_df)

: 选择所有行。当列名未知但索引可用时,iloc()很有用。

使用loc()

loc()使用标签(列名)。虽然与GetItem选择多列类似,但loc为组合行和列选择提供了更大的灵活性。


import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9], 'col4': [10, 11, 12]}
df = pd.DataFrame(data)

# 选择'col1','col3'和'col4'
selected_df = df.loc[:, ['col1', 'col3', 'col4']]  # : 选择所有行,['col1', 'col3', 'col4'] 选择指定的列
print(selected_df)

loc明确指示基于标签的选择,当结合使用基于标签的行选择或布尔索引时,这很有用。

布尔索引选择列

对于更复杂的情况,使用loc的布尔索引允许根据应用于列名的条件选择列。


import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9], 'col4': [10, 11, 12], 'other_col': [13,14,15]}
df = pd.DataFrame(data)

# 选择以'col'开头的列
selected_df = df.loc[:, [col.startswith('col') for col in df.columns]]
print(selected_df)

性能考虑

通常,GetItem最快,其次是loc,然后是iloc。但是,除非处理大型DataFrame,否则差异通常可以忽略不计。优先考虑可读性和可维护性,而不是微小的性能提升。

结论

选择多列是Pandas中的基础操作。对于已知的列名,GetItem最简单。iloc()适用于基于整数的索引,而loc()提供灵活性,并且更适合基于标签的选择。最佳方法取决于您的具体需求和数据结构。

常见问题

  • 问:如果我选择一个不存在的列会发生什么?
    答:GetItem和loc会引发KeyError。如果索引超出范围,iloc会引发IndexError
  • 问:我可以根据条件选择列吗?
    答:可以,使用loc的布尔索引(如上所示)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注