以下所有代码都是从完整代码中取的某一行,作为使用示例。
import pandas as pd
使用
merge
组合两个表pd.merge(person, address, on= 'personId', how = 'left')[['firstName', 'lastName', 'city', 'state']]
其中
person,address
为表名,两个表均为dataframe
结构,根据personId
进行左连接。选中firstName, lastName, city, state
四列组成一个dataframe
。employee.merge(employee, left_on ='managerId', right_on = 'id', how = 'left')
其中
employee
为表名,结构为dataframe
,此代码将同一个表合并了两次。返回包含左侧employee
的所有行,对于右侧的employee
,只有当id
与左侧的managerId
匹配的时候才会被保留,如果managerId
没有找到对应的右侧id
,那么合并后对应的列将包含缺失值NaN
。对于其他相同的列名,比如salary
,合并后,左侧的为salary_x
,右侧的为salary_y
。.groupby()
指定按某一列分组min_id = person.groupby('email')['id'].transform('min')
将
person
(Dataframe
)分成多个组,每个组都包含具有相同email
值的行,['id']
指定要在id
列上进行操作。最后使用.transform('min’)
方法在id
列上找到最小值,该函数返回的是一个Series
对象。dataframe
使用query
查询符合条件的行,组成一个dataframe
df = df.query('salary_x > salary_y')
dataframe
使用rename
重命名指定列的列名df[['name_x']].rename(columns = {'name_x':'Employee'})
指定列后使用
value_counts()
返回该列每个唯一值的出现次数duplicates = df['email'].value_counts()[df['email'].value_counts() > 1].index
其中
df
为dataframe
结构,先计数,然后将计数结果用于条件判断,会返回一个bool
序列,其中True
表示符合条件,False
表示不符合条件,.index
将返回上述结果的索引。
注意:.index
的返回值不是一个列表,是一个pandas.index
对象,它是用于索引的类,在上例中,它包含了在email
列中符合条件的项的地址。可以使用
.tolist()
将index
对象转化为一个列表duplicates_list = duplicates.tolist()
使用
.isin()
判断值是否在索引对象中,该函数返回一个bool Series
df = df[df['email].isin(duplicates)]
df[df['email'].isin(duplicates)]
, 使用这个布尔Series作为索引来从df中筛选出相应的行。df = customers[~customers['id'].isin(orders['customerId'])]
其中
customerId
是Customers表中id
的外键。drop_duplicates()
函数用于删除DataFrame
中的重复行(只保留第一次出现的行),subset
参数用于指定基于哪些列来判断重复,不指定就是默认基于所有列。df = df.drop_duplicates(subset=['email'])
.index()
函数用于获取索引,.drop()
函数用于删除指定的行。removed_person = person[person['id'] != min_id] person.drop(removed_person.index, inplace=True)
其中
inplace=True
表示操作直接在person
上执行to_datetime()
函数将输入的参数转换为datetime
对象(pandas
可以理解和操作的日期时间格式)df['recordDate'] = pd.to_datetime(df['recordDate'])
sort_values()
方法按给定列名的值进行排序df_sorted = df.sort_values('recordDate') df.sort_values(by='num', ascending = False, inplace=True)
.diff()
方法用于计算DataFrame
或Series
中连续元素之间的差异df_sorted['date_diff'] = df_sorted['recordDate'].diff().dt.days
.dt.days
属性用于从这些时间差中提取天数.iloc[]
是一个基于整数位置的索引器select_rows = df_sorted.iloc[1:][condition]
其中
condition
是一个布尔Series
,代码的意思是,选择第二行以及以后的行,再在这些行中筛选出满足条件的行。.reset_index()
用于重置索引,把索引转换成一个普通的列df = activity.groupby('player_id')['event_date'].min().reset_index()
对
DataFrame
执行分组操作groupby
并结合聚合函数min, max, sum, mean等
时,返回的通常是一个Series
对象,如果聚合是针对单列的。但是,当对多列进行聚合或者希望保持分组键(groupby
的列)作为结果DataFrame
的一部分时,返回的是一个DataFrame
。
尽管只对'event_date'
这一列应用了min()
聚合函数,但由于调用了reset_index()
,改变了结果的类型。reset_index()
的作用不仅仅是重置索引,它还会将原先的分组键(在这里是player_id
)作为一个普通列加入到结果中。(把Series的索引player_id
转化为一个普通的列,并给Series
添加一个新的默认整数索引。).isnull()
方法用于检测Dataframe
或Series
中的缺失值,此方法返回一个与原始数据形状相同的bool
对象df = df.query('(referee_id != 2 | referee_id.isnull())')
.size()
计算组中的行数df = orders.groupby('customer_number').size().reset_index(name='count')
其中索引是
coustomer_number
,值是每个customer_number
对应的订单数量。reset_index
方法将这个Series
转换成一个新的Dataframe
,并将原来的索引customer_number
转换成一个新的列。name = 'count'
参数制定了新生成的列的名称。.unique()
方法用于获取Series
或DataFrame
中某一列的唯一值数组,此方法返回的是数组。invalid_ids = red_orders.sales_id.unique() # 唯一销售员ID
对一个
Series
对象A使用该方法:A.unique()
对一个DataFrame
对象B使用该方法:B['A'].unique()