- pandas的iloc和loc是分别使用位置和标签(列名或者行名)进行筛选数据。其中iloc是位置索引,loc是根据标签筛选。
- pivot和melt是pandas对整个数据表进行更改,其中pivot是将长格式数据列变成宽格式数据列(把某列的数据变成列名),melt是将宽数据格式变成长数据格式()
#因索引从0开始
data.iloc[1:2,:]:选取第2-3行的值但是选不到3,列全选,2行所有列的值
data.iloc[1,2]:1表示第2行,2表示第三列,选取2行3列的值
data.iloc[1:2,1:2]:第2行第2列的值
data[1,:]:第1行所有列的值
data[:,2]:第2列所有行的值
从中可以看出当不存在切片:符号时,选取的是某单个值,存在切片:时,选取的数据片,即某几列或几行数据。
boolean_selection = df.iloc[:, [True, False, True]]# 选择第一列和第三列的所有行
在数据预处理中,pandas很多函数返回的都是bool类型,例如isnull,当我们筛选哪些特征存在空值时,即可使用iloc
boolean_selection = df.iloc[:, df.isnull().any()]# 选择所有为空的列
注意:因为df.isnull()是每个值是否为空的二维bool数组,而iloc传递的bool是一维列表,故使用any对每列进行聚合,检查是否有至少一个 True 值,有一个空值就是该列就是True,没有查找到该列就是False。
注意loc筛选[A,B],其中AB都可以使用标签名切片。
df.loc['A':'D','Name':'Salary']# 选取A到D行,name-salary列
data.loc['A',:] #选取A行所有值
data.loc[:,'B'] #选取B列所有值
data.loc[1:2,'columns_name'] #选取columns_name中1-2即第2行的数据 根据列名筛选行 限制列数
data.loc[data['columns_name']=='name1',:]#根据行标签中某个值筛选所有的列。限制行数
data.loc[data['columns_name']=='name1','columns_name'] #限制行列数 注意不能使用索引切片
根据某行的条件或者某列的条件进行筛选。
boolean_selection =df.loc[df['Age'] > 30,:] # 选择 'Age' 列中大于 30 的所有行和列 df['Age'] > 30 返回的是行的bool类,若大于30就是True否则False
print(boolean_selection)
将pandas的DataFrame格式数据从长格式转变为宽格式。
pd.pivot(index=None, columns=None, values=None)
长格式
id | date | 产品 | 销售 |
---|---|---|---|
1 | 202301 | 电脑 | 3 |
2 | 202302 | 手机 | 5 |
3 | 202302 | 电脑 | 2 |
4 | 202301 | 手机 | 6 |
5 | 202303 | 电脑 | 1 |
6 | 202303 | 手机 | 7 |
宽格式
id | date | 电脑 | 手机 |
---|---|---|---|
1 | 202301 | 3 | 6 |
2 | 202302 | 2 | 5 |
3 | 202303 | 1 | 7 |
import pandas as pd
data = {'Date': ['202301', '202302', '202302', '202301','202303','202303'],
'Variable': ['电脑', '手机', '电脑', '手机','电脑', '手机'],
'Value': [3,5,2,6,1,7]}
df_long = pd.DataFrame(data)
print(df_long)
df_wide = df_long.pivot(index='Date', columns='Variable', values='Value')
print(df_wide)
将pandas的DataFrame格式数据从宽格式转变为长格式。
pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name=‘value’, col_level=None)
宽格式
id | 用户名 | 202301 | 202302 | 202303 |
---|---|---|---|---|
1 | a | 30 | 60 | 80 |
2 | b | 20 | 50 | 90 |
3 | c | 10 | 70 | 50 |
长格式
id | 用户名 | 年份 | 消费 |
---|---|---|---|
1 | a | 202301 | 30 |
2 | b | 202301 | 20 |
3 | c | 202301 | 10 |
1 | a | 202302 | 60 |
2 | b | 202302 | 50 |
3 | c | 202302 | 70 |
1 | a | 202303 | 80 |
2 | b | 202303 | 90 |
3 | c | 202303 | 50 |
import pandas as pd
data = {'id': [1,2,3],
'用户名': ['a', 'b', 'c'],
'202301': [30,20,10],
'202302':[60,50,70],
'202303':[80,90,50]}
df_wide = pd.DataFrame(data)
df_long = df_wide.melt(id_vars=['id','用户名'],value_vars=['202301','202302','202303'],var_name='年份',value_name='消费')
#或
df_long2 = pd.melt(frame=df_wide,id_vars=['id','用户名'],value_vars=['202301','202302','202303'],var_name='年份',value_name='消费')
iloc loc melt pivot 这些对pandas基础操作的函数可以帮助我们在数据预处理的时候更好的对数据进行筛选。总的来说,在处理不同数据格式和筛选时非常有用的工具