美文网首页
Python | Pandas

Python | Pandas

作者: shwzhao | 来源:发表于2022-06-21 15:09 被阅读0次

还没整理好,再慢慢搞吧。


资源

利用 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()

相关文章

网友评论

      本文标题:Python | Pandas

      本文链接:https://www.haomeiwen.com/subject/jaudcltx.html