Python pandas库提供了几种选择和过滤数据的方法,如loc、iloc、[]括号操作符、query、isin、between等等
本文将介绍使用pandas进行数据选择和过滤的基本技术和函数。无论是需要提取特定的行或列,还是需要应用条件过滤,pandas都可以满足需求。
选择列
loc[]:根据标签选择行和列。df.row_label loc, column_label]
也可以使用loc进行切片操作:
df.loc['row1_label':'row2_label' , 'column1_label':'column2_label']
例如
代码语言:javascript复制 # Using loc for label-based selection
df.loc[:, 'Customer Country':'Customer State']
代码语言:javascript复制 # Using loc for label-based selection
df.loc[[0,1,2], 'Customer Country':'Customer State']
iloc[]:根据位置索引选择行和列。df.iloc [row_position column_position]
可以使用iloc进行切片操作:
代码语言:javascript复制 df.iloc['row1_position':'row2_position','col1_position':'col2_position']
例如:
代码语言:javascript复制 # Using iloc for index-based selection
df.iloc[[0,1,2,3] , [3,4,5,6,7,8]]
# or
df.iloc[[0,1,2,3] , 3:9]
代码语言:javascript复制 # Using iloc for index-based selection
df.iloc[:, 3:8]
[]括号操作符:它允许选择一个或多个列。df[['column_label']]或df[['column1', 'column2']]]
代码语言:javascript复制 # Selecting a single column
df[['Customer Country']]
代码语言:javascript复制 # Selecting multiple columns
df[['Customer Country', 'Customer State']]
过滤行
loc[]:按标签过滤行。df.loc(条件)
代码语言:javascript复制 # Using loc for filtering rows
condition = df['Order Quantity'] > 3
df.loc[condition]
# or
df.loc[df['Order Quantity'] > 3]
代码语言:javascript复制 # Using loc for filtering rows
df.loc[df['Customer Country'] == 'United States']
iloc():按位置索引筛选行。
代码语言:javascript复制 # Using iloc for filtering rows
df.iloc[[0, 2, 4]]
代码语言:javascript复制 # Using iloc for filtering rows
df.iloc[:3, :2]
[]括号操作符:它允许根据条件过滤行。df(条件)
代码语言:javascript复制 # Using [] bracket operator for filtering rows# Using [] bracket operator for filtering rows
condition = df['Order Quantity'] > 3
df[condition]
# or
df[df['Order Quantity'] > 3]
isin([]):基于列表过滤数据。df (df (column_name”).isin ([value1, ' value2 ']))
代码语言:javascript复制 # Using isin for filtering rows
df[df['Customer Country'].isin(['United States', 'Puerto Rico'])]
代码语言:javascript复制 # Filter rows based on values in a list and select spesific columns
df[["Customer Id", "Order Region"]][df['Order Region'].isin(['Central America', 'Caribbean'])]
代码语言:javascript复制 # Using NOT isin for filtering rows
df[~df['Customer Country'].isin(['United States'])]
query():方法用于根据类似sql的条件表达式选择数据。df.query(条件)
如果列名包含空格或特殊字符,首先应该使用rename()函数来重命名它们。
代码语言:javascript复制 # Rename the columns before performing the query
df.rename(columns={'Order Quantity' : 'Order_Quantity', "Customer Fname" : "Customer_Fname"}, inplace=True)
# Using query for filtering rows with a single condition
df.query('Order_Quantity > 3')
代码语言:javascript复制 # Using query for filtering rows with multiple conditions
df.query('Order_Quantity > 3 and Customer_Fname == "Mary"')
between():根据在指定范围内的值筛选行。df[df['column_name'].between(start, end)]
代码语言:javascript复制 # Filter rows based on values within a range
df[df['Order Quantity'].between(3, 5)]
字符串方法:根据字符串匹配条件筛选行。例如str.startswith(), str.endswith(), str.contains()
代码语言:javascript复制 # Using str.startswith() for filtering rows
df[df['Category Name'].str.startswith('Cardio')]
代码语言:javascript复制 # Using str.contains() for filtering rows
df[df['Customer Segment'].str.contains('Office')]
更新值
loc[]:可以为DataFrame中的特定行和列并分配新值。
代码语言:javascript复制 # Update values in a column based on a condition
df.loc[df['Customer Country'] == 'United States', 'Customer Country'] = 'USA'
iloc[]:也可以为DataFrame中的特定行和列并分配新值,但是他的条件是数字索引
代码语言:javascript复制 # Update values in a column based on a condition
df.iloc[df['Order Quantity'] > 3, 15] = 'greater than 3'
#
condition = df['Order Quantity'] > 3
df.iloc[condition, 15] = 'greater than 3'
replace():用新值替换DataFrame中的特定值。df.['column_name'].replace(old_value, new_value, inplace=True)
代码语言:javascript复制 # Replace specific values in a column
df['Order Quantity'].replace(5, 'equals 5', inplace=True)
总结
Python pandas提供了很多的函数和技术来选择和过滤DataFrame中的数据。比如我们常用的 loc和iloc,有很多人还不清楚这两个的区别,其实它们很简单,在Pandas中前面带i的都是使用索引数值来访问的,例如 loc和iloc,at和iat,它们访问的效率是类似的,只不过是方法不一样,我们这里在使用loc和iloc为例做一个简单的说明:
loc:根据标签(label)索引,什么是标签呢?
行标签就是我们所说的索引(index),列标签就是列名(columns)
iloc,根据标签的位置索引。
iloc就是 integer loc的缩写。也就是说我们不知道列名的时候可以直接访问的第几行,第几列
这样解释应该可以很好理解这两个的区别了。最后如果你看以前(很久以前)的代码可能还会看到ix,它是先于iloc、和loc的。但是现在基本上用iloc和loc已经完全能取代ix,所以ix已经被官方弃用了。如果有看到的话说明这个代码已经很好了,并且完全可以使用iloc替代。
最后,通过灵活本文介绍的这些方法,可以更高效地处理和分析数据集,从而更好地理解和挖掘数据的潜在信息。希望这个指南能够帮助你在数据科学的旅程中取得更大的成功!