还没整理好,再慢慢搞吧。
资源
利用 Python 进行数据分析 · 第 2 版
Pandas进阶修炼120题
import pandas as pd
1. 读取写出
1.1 数据读取
可以读取的数据文件格式有很多,二进制、json、HDF5......
我需要掌握的只是读取.fa之类的普通文本格式和.csv、.tsv之类的数据框格式。
-
pd.read_csv('input_file')
sep = '\t': 设置分隔符为制表符,默认为逗号
header = 0: 设置第一行为表头,也可设置无表头header = None,多层索引header = [0, 1, 3]
names = ['col1', 'col2', 'col3']: 指定列名
index_col = 'col1': 指定索引列
usecols = []: 导入部分列
nrows: 读取指定行
skiprows = 2: 跳过指定行
skip_blank_lines = True: 跳过空行,header参数将忽略空行和注释行
>>> df = pd.read_csv("mpg.tsv", sep="\t", header=0, usecols=[0,1,5,4,3,2], names=["Manu","Model","Displ","Year","Cyl","Trans"])
>>> df
Manu Model Displ Year Cyl Trans
0 audi a4 1.8 1999 4 auto(l5)
1 audi a4 1.8 1999 4 manual(m5)
2 audi a4 2.0 2008 4 manual(m6)
3 audi a4 2.0 2008 4 auto(av)
4 audi a4 2.8 1999 6 auto(l5)
.. ... ... ... ... ... ...
229 volkswagen passat 2.0 2008 4 auto(s6)
230 volkswagen passat 2.0 2008 4 manual(m6)
231 volkswagen passat 2.8 1999 6 auto(l5)
232 volkswagen passat 2.8 1999 6 manual(m5)
233 volkswagen passat 3.6 2008 6 auto(s6)
[234 rows x 6 columns]
-
pd.read_excel(): 读取excel文件
sheet_name = 'Sheet2': 指定标签页,默认读取第一个
df = pd.read_excel("team.xlsx")
1.2 数据写出
-
pd.to_csv('output_file')
header = False: 不要表头
index = False: 不要索引
pd.to_scv('')
-
pd.to_excel('output.xlsx')
sheet_name = 'Sheet1': 指定标签页
2. 索引
-
df.set_index(): 建立索引
inplace = True -
df.reset_index(): 重置索引
level = class1 -
pd.MultiIndex.from_arrays(): 多层索引 pd.MultiIndex.from_tuples()pd.MultiIndex.from_product()
3. 查看数据
-
df.dtypes: 数据类型查看, 各字段的数据类型
>>> df.dtypes
Manu object
Model object
Displ float64
Year int64
Cyl int64
Trans object
dtype: object
df.head()
>>> df.head()
Manu Model Displ Year Cyl Trans
0 audi a4 1.8 1999 4 auto(l5)
1 audi a4 1.8 1999 4 manual(m5)
2 audi a4 2.0 2008 4 manual(m6)
3 audi a4 2.0 2008 4 auto(av)
4 audi a4 2.8 1999 6 auto(l5)
df.tail()df.sample()
>>> df.sample()
Manu Model Displ Year Cyl Trans
178 toyota 4runner 4wd 4.7 2008 8 auto(l5)
df.shape
>>> df.shape
(234, 6)
df.info()
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 234 entries, 0 to 233
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Manu 234 non-null object
1 Model 234 non-null object
2 Displ 234 non-null float64
3 Year 234 non-null int64
4 Cyl 234 non-null int64
5 Trans 234 non-null object
dtypes: float64(1), int64(2), object(3)
memory usage: 11.1+ KB
df.describe()
>>> df.describe()
Displ Year Cyl
count 234.000000 234.000000 234.000000
mean 3.471795 2003.500000 5.888889
std 1.291959 4.509646 1.611534
min 1.600000 1999.000000 4.000000
25% 2.400000 1999.000000 4.000000
50% 3.300000 2003.500000 6.000000
75% 4.600000 2008.000000 8.000000
max 7.000000 2008.000000 8.000000
-
df.mean()
axis
>>> df.mean()
Displ 3.471795
Year 2003.500000
Cyl 5.888889
dtype: float64
4. 数据筛选
4.1 行
-
df.loc[]: 按索引选择行 -
df.iloc[]: 按数字索引选择行
>>> df.iloc[1]
Manu audi
Model a4
Displ 1.8
Year 1999
Cyl 4
Trans manual(m5)
Name: 1, dtype: object
>>> df.iloc[[1,3,5]]
Manu Model Displ Year Cyl Trans
1 audi a4 1.8 1999 4 manual(m5)
3 audi a4 2.0 2008 4 auto(av)
5 audi a4 2.8 1999 6 manual(m5)
-
df[1:3]: 切片选择行
>>> df[3:5]
Manu Model Displ Year Cyl Trans
3 audi a4 2.0 2008 4 auto(av)
4 audi a4 2.8 1999 6 auto(l5)
4.2 列
- 选择列
df['Manu']
df[['Maun', 'Model']]
- 点操作:当列名为一个合法的Python变量时,可以直接使用点操作为属性去使用
>>> df.Manu
0 audi
1 audi
2 audi
3 audi
4 audi
...
229 volkswagen
230 volkswagen
231 volkswagen
232 volkswagen
233 volkswagen
Name: Manu, Length: 234, dtype: object
4.3 行和列
-
df.loc[]: 按轴标签
>>> df.iloc[1,3]
1999
>>> df.loc[1,"Model"]
'a4'
>>> df.loc[14:17, ['Trans', 'Year']]
Trans Year
14 manual(m6) 2008
15 auto(l5) 1999
16 auto(s6) 2008
17 auto(s6) 2008
-
df.iloc[]: 按数字索引
[234 rows x 6 columns]
>>> df.iloc[14:17, [5,3]]
Trans Year
14 manual(m6) 2008
15 auto(l5) 1999
16 auto(s6) 2008
注意
df.loc[]、df.iloc[]的14:17的结果是不一样的
-
df.at[]: 取具体值 -
df.iat[]: 数字索引取具体值
4.4 条件
- 比较
>>> df[df.Model == "a4"] # 按表达式筛选行
Manu Model Displ Year Cyl Trans
0 audi a4 1.8 1999 4 auto(l5)
1 audi a4 1.8 1999 4 manual(m5)
2 audi a4 2.0 2008 4 manual(m6)
3 audi a4 2.0 2008 4 auto(av)
4 audi a4 2.8 1999 6 auto(l5)
5 audi a4 2.8 1999 6 manual(m5)
6 audi a4 3.1 2008 6 auto(av)
df.query()df.filter()
4.5 高级过滤
df.where()np.where()df.mask()df.lookup()
5. 添加修改
5.1 增加列
- 定义新列
frame['new_col']
df.insert()df.assign()df.eval()
5.2 增加行
- 定义新行
-
df.append(): 追加 -
pd.concat()
ignore_index=True: 索引重新编
5.3 合并
pd.merge()pd.combine()pd.combine_first()df.update()
5.4 修改
- 赋值修改
-
df.replace(): 替换数据 - 填充空值
-
df.rename()修改索引名
5.5 比对
``
5.6 排序
-
df.sort_index(): 索引排序
axis=1: 在列索引上排序
ascending=False: 降序
ignore_index=True
inplace=True: 排序后生效,改变原数据
na_position='first': 空值在前, 另'last'表示空值在后
level=1: 如果多层,排一级 -
df.reindex(): 按自己定义的顺序索引
axis=1: 指定列顺序 -
df.sort_values(): 数值排序 df.namallest()
5.7 删除
pop()del df['col']-
df.drop(): 通过指定标签名称和相应的轴,或直接给定索引或列名称来删除行或列
labels: 要删除的列或者行,如果要删除多个,传入列表;
axis: 轴的方向,0为行,1为列,默认为0;
index: 指定的一行或多行;
column: 指定的一列或多列;
level: 索引层级,将删除此层级;
inplace: 布尔值,是否生效;
errors: ignore或raise,默认为raise,如果为ignore,则容忍错误,仅删除现有标签。
>>> df = pd.DataFrame({'A':list('abce'), 'B':range(4)})
>>> df
A B
0 a 0
1 b 1
2 c 2
3 e 3
>>> df.drop([0, 1]) # 删除指定行
A B
2 c 2
3 e 3
>>> df.drop('A', axis=1) # 删除指定列
B
0 0
1 1
2 2
3 3
-
df.drop_duplicates(): 删除重复值
subset: 指定的标签或者标签序列,仅删除这些列重复值,默认情况为所有列;
keep:first保留第一次出现的重复值,默认;last保留最后一次出现的重复值;False删除所有重复值;
inplace: 是否生效;
ignore_index: 如果为True,则重新分布自然索引。 -
df.dropna(): 删除空值
6. 文本处理
6.1 文本处理
这块与 Python 自带的字符串方法非常相似
- 大小写转换
.str.lower()、.str.upper()、.str.title()、.str.capitalize()、.str.swapcase() - 填充
.str.center()、.str.ljust()、.str.rjust()、.str.pad()、.str.zfill() - 计数
.str.count()、.str.len() - 判断
.str.isalpha()、.str.isnumeric()、.str.isalnum()、.str.isdigit()、.str.isdecimal()、.str.isspace()、.str.islower()、.str.isupper()、.str.istittle()
6.2 文本高级处理
-
.str.split(): 字符分隔 -
.str.slice(): 文本切片选择 -
.str.partition: 文本划分 -
.str.replace(): 文本替换 .str.slice_replace().str.repeat().str.cat().str.findall().str.contains().str.extract()
7. 分组聚合
-
df.groupby(): 分组
by
axis
levle
sort
group_keys
observed
按标签分组
表达式
函数分组
多种方法混合
df.pipe()
-
df.get_group(): 查看分组对象单个分组的内容 -
pd.cut(): 数据分箱 -
pd.qcut(): 数据分箱
8. 结构转换
-
df.pivot(): 数据透视
index
columns
values -
pd.pivot_table(): 数据透视 -
df.melt(): 数据融合,df.pivot()的逆操作函数 -
df.stack(): 数据堆叠 -
df.transpose(): 数据转置,缩写df.T -
df.swapaxes(): 数据转置
因子化
9. 数据迭代
df.iterrows()df.itertuples()df.items()
10. 函数应用
pipe()apply()applymap()map()agg()transform()copy()










网友评论