enumerate()
- 循环读出每个列的索引值和列名
- for col_num, col_name in enumerate(df):
dataframe.groupby(条件选择)
-
用法
-
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
- by :接收映射、函数、标签或标签列表;用于确定聚合的组。
- axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
- level : 接收int、级别名称或序列,默认为None;如果轴是一个多索引(层次化),则按一个或多个特定级别分组。
- as_index:接收布尔值,默认Ture;Ture则返回以组标签为索引的对象,False则不以组标签为索引。
-
示例
df = pd.DataFrame({'Gender' : ['男', '女', '男', '男', '男', '男', '女', '女', '女'],
'name' : ['周杰伦', '蔡依林', '林俊杰', '周杰伦', '林俊杰', '周杰伦',
'田馥甄','蔡依林', '田馥甄'],
'income' : [4.5, 2.9, 3.8, 3.7, 4.0, 4.1, 1.9, 4.1, 3.2],
'expenditure' : [1.5, 1.9, 2.8, 1.7, 4.1, 2.5, 1.1, 3.4, 1.2]
})
print(df)
输出:
Gender name income expenditure
0 男 周杰伦 4.5 1.5
1 女 蔡依林 2.9 1.9
2 男 林俊杰 3.8 2.8
3 男 周杰伦 3.7 1.7
4 男 林俊杰 4.0 4.1
5 男 周杰伦 4.1 2.5
6 女 田馥甄 1.9 1.1
7 女 蔡依林 4.1 3.4
8 女 田馥甄 3.2 1.2
- 根据其中一列分组
df_expenditure = df.groupby(['Gender'])
输出:(迭代器?)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000265342B3320>
df_expenditure = df.groupby(['Gender'])
for group_name, group_data in df_expenditure:
print(group_data)
输出:
('女', Gender name income expenditure
1 女 蔡依林 2.9 1.9
6 女 田馥甄 1.9 1.1
7 女 蔡依林 4.1 3.4
8 女 田馥甄 3.2 1.2)
('男', Gender name income expenditure
0 男 周杰伦 4.5 1.5
2 男 林俊杰 3.8 2.8
3 男 周杰伦 3.7 1.7
4 男 林俊杰 4.0 4.1
5 男 周杰伦 4.1 2.5)
df_expenditure = df.groupby(['Gender'])['name']
for group_name, group_data in df_expenditure:
print(group_name)
print(group_data)
输出:(主键为性别,分类找出对应的所有名字)
('女', 1 蔡依林
6 田馥甄
7 蔡依林
8 田馥甄
Name: name, dtype: object)
('男', 0 周杰伦
2 林俊杰
3 周杰伦
4 林俊杰
5 周杰伦
- 最后可以利用sum(),mean(),count(),size()来做计算
dataframe.sort_values
- 案例
df_expenditure = df.groupby(['name','Gender']).sum()
df_expenditure = df_expenditure.sort_values(by='expenditure', ascending=True)
print(df_expenditure)
输出:
income expenditure
name Gender
田馥甄 女 5.1 2.3
蔡依林 女 7.0 5.3
周杰伦 男 12.3 5.7
林俊杰 男 7.8 6.9
- 以'name','Gender'为组合主键,按照expenditure升序排列
dataframe.isin
- 语法
df_list = df['name'].isin(['周杰伦','蔡依林'])
print(df_list)
words_pd_select = df[df_list]
print(words_pd_select)
- 输出:
0 True
1 True
2 False
3 True
4 False
5 True
6 False
7 True
8 False
Name: name, dtype: bool
Gender name income expenditure
0 男 周杰伦 4.5 1.5
1 女 蔡依林 2.9 1.9
3 男 周杰伦 3.7 1.7
5 男 周杰伦 4.1 2.5
7 女 蔡依林 4.1 3.4
- 条件选择,选择特定维度,特定的值
mean,sum,drop
axis=1
people=DataFrame(np.ones((5,5)),
columns=['a','b','c','d','e'],
index=['Joe','Steve','Wes','Jim'])
print(people.mean(axis=1))
print (people.drop('Jim',axis=0))
输出:
Joe 5.0
Steve 5.0
Wes 5.0
Jim 5.0
b c d e
Joe 1.0 1.0 1.0 1.0
Steve 1.0 1.0 1.0 1.0
Wes 1.0 1.0 1.0 1.0
Jim 1.0 1.0 1.0 1.0
第一个列子 df.mean(axis=1)代表沿着列水平方向计算均值,
而第二个列子df.drop(name, axis=1) 代表将name对应的列
标签沿着水平的方向依次删掉。
isnull()的运用
- 查找缺失值
- isnull().any(axis)
- axis = 0 选择列 默认
- axis = 1 选择行
- isnull().any().sum()
- 计算计算缺失值列总数
- dataframe[df.isnull().any(axis=1)]
- 输出含有null值的整行数据
.str.cat
- 多列拼接
- 适用于一维数据Series或字符串,可以使用astype(np.str),转换成字符串格式
- 示例
rfm_pd['d'] = rfm_pd_tmp['a'].str.cat(rfm_pd_tmp['b']).str.cat(
rfm_pd_tmp['b'])
新增d列,把a.b.c列字符拼接
输入:pd.Series(['a','b','c']).str.cat(sep=';')
输出:'a;b;c'
输入:pd.Series(['a','b','c']).str.cat(['A','B','C'], sep=';')
输出:
0 a;A
1 b;B
2 c;C
pd.concat
- 多个dataframe拼接
- 示例
a = pd.DataFrame(np.ones((2,2)),columns=['pro1', 'pro2'])
print(a)
b = pd.DataFrame(np.random.random((2,1)), columns=['dd'])
print(b)
predict_pd = pd.concat((a,b), axis=1)
print(predict_pd)
- 输出
pro1 pro2
0 1.0 1.0
1 1.0 1.0
dd
0 0.236130
1 0.058731
pro1 pro2 dd
0 1.0 1.0 0.236130
1 1.0 1.0 0.058731
pd.fillna()
- pd.fillna(值) 所有缺失值填充
- pd.fillna(字典) 给指定的列填充指定的值
- 字典:{列名:值}
交叉表 crosstab
- 交叉表是用于统计分组频率的特殊透视表
pd.crosstab(主属性, 需要分组统计的属性,margins=True)
margins=True 表示添加累加列
用正则取出属性
df.filter(regex=**)
get_dummies 特征因子化
以Cabin为例,原本一个属性维度,因为其取值可以是[‘yes’,‘no’],而将其平展开为’Cabin_yes’,'Cabin_no’两个属性
原本Cabin取值为yes的,在此处的"Cabin_yes"下取值为1,在"Cabin_no"下取值为0
原本Cabin取值为no的,在此处的"Cabin_yes"下取值为0,在"Cabin_no"下取值为1
dummies_Cabin = pd.get_dummies(data_train['Cabin'], prefix= 'Cabin')
print(dummies_Cabin.head())
- 输出
Cabin_No Cabin_Yes
0 1 0
1 0 1
2 1 0
3 0 1
4 1 0
add_prefix(str)
- 对于Series,行标签是前缀的。对于DataFrame,列标签是前缀的。
参数: | prefix : str要在每个标签前添加的字符串。 |
---|---|
返回: | Series 或 DataFrame具有更新标签的新Series或DataFrame。 |