pandas dataframe 根据列值进行过滤
参考:pandas dataframe filter by column value
在数据分析过程中,我们经常需要根据某些条件对数据进行过滤。Pandas 提供了多种方法来实现这一需求。本文将详细介绍如何使用 pandas dataframe 根据列值进行过滤。
1. 使用布尔索引进行过滤
布尔索引是一种常用的过滤方式。我们可以创建一个布尔序列,然后使用这个布尔序列来选择 dataframe 中的行。
例如,我们有一个包含多列数据的 dataframe,我们想要选择出 ‘column1’ 列值大于 50 的所有行。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5']
})
# 创建一个布尔序列
bool_series = df['column1'] > 50
# 使用布尔序列选择行
filtered_df = df[bool_series]
print(filtered_df)
Output:
2. 使用 query
方法进行过滤
query
方法是另一种过滤方式,它允许我们使用字符串表达式来定义过滤条件。
例如,我们想要选择出 ‘column1’ 列值大于 50 并且 ‘column2’ 列值包含 ‘pandasdataframe.com’ 的所有行。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5']
})
# 使用query方法选择行
filtered_df = df.query('column1 > 50 and column2.str.contains("pandasdataframe.com")')
print(filtered_df)
Output:
3. 使用 loc
和 iloc
进行过滤
loc
和 iloc
是 pandas 提供的两种基于标签和基于整数位置的数据选择方法。我们可以结合布尔索引使用这两种方法进行过滤。
例如,我们想要选择出 ‘column1’ 列值大于 50 的所有行,并且只保留 ‘column2’ 列。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5']
})
# 使用loc方法选择行和列
filtered_df = df.loc[df['column1'] > 50, 'column2']
print(filtered_df)
Output:
同样,我们也可以使用 iloc
方法选择行和列。需要注意的是,iloc
方法使用的是整数位置,而不是标签。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5']
})
# 使用iloc方法选择行和列
filtered_df = df.iloc[(df['column1'] > 50).values, 1]
print(filtered_df)
Output:
4. 使用 isin
方法进行过滤
isin
方法允许我们选择 dataframe 中某列值在给定列表中的所有行。
例如,我们想要选择出 ‘column2’ 列值在给定列表 [‘pandasdataframe.com1’, ‘pandasdataframe.com3’, ‘pandasdataframe.com5’] 中的所有行。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5']
})
# 使用isin方法选择行
filtered_df = df[df['column2'].isin(['pandasdataframe.com1', 'pandasdataframe.com3', 'pandasdataframe.com5'])]
print(filtered_df)
Output:
5. 使用 between
方法进行过滤
between
方法允许我们选择 dataframe 中某列值在给定范围内的所有行。
例如,我们想要选择出 ‘column1’ 列值在 50 到 150 之间的所有行。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5']
})
# 使用between方法选择行
filtered_df = df[df['column1'].between(50, 150)]
print(filtered_df)
Output:
6. 使用 filter
方法进行过滤
filter
方法允许我们根据列名或者行索引名进行过滤。这个方法对于选择包含特定字符串的列或者行非常有用。
例如,我们想要选择出列名包含 ‘column’ 的所有列。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5'],
'other_column': ['other1', 'other2', 'other3', 'other4', 'other5']
})
# 使用filter方法选择列
filtered_df = df.filter(like='column')
print(filtered_df)
Output:
同样,我们也可以使用 filter
方法选择行。
import pandas as pd
# 创建一个dataframe
df = pd.DataFrame({
'column1': [1, 51, 50, 100, 200],
'column2': ['pandasdataframe.com1', 'pandasdataframe.com2', 'pandasdataframe.com3', 'pandasdataframe.com4', 'pandasdataframe.com5'],
'other_column': ['other1', 'other2', 'other3', 'other4', 'other5']
}, index=['row1', 'row2', 'pandasdataframe.com_row', 'row4', 'row5'])
# 使用filter方法选择行
filtered_df = df.filter(axis=0, regex='pandasdataframe.com')
print(filtered_df)
Output:
以上就是 pandas dataframe 根据列值进行过滤的几种常用方法。在实际使用中,我们可以根据需要选择合适的方法。