还没整理好,再慢慢搞吧。
资源
利用 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()
网友评论