“Pandas数据处理与分析:实用技巧与应用“

目录

# 开篇

1. pandas的series的了解

1.1 pd.Series 创建

1.2 pd.series 的索引使用

1.3 pd.series 之字典/索引

1.4 pandas 转换数据类型

1.5 pandas 通过索引或者通过位置来取值

1.6 pandas 指定行取值

1.7 pands之Series 切片和索引

1.8 pands之Series 的索引和值

2. pandas读取外部数据/sql/mongodb

2.1 read_csv 读取csv文件

3. pandas的dataFrame的创建

3.1 pd.DataFrame 的创建

3.2 DataFrame指定行索引,指定列索引

3.3 DataFrame切片操作

3.4 字典转成DataFrame

4. Dataframe的描述信息

4.1 sort_values 排序

4.2 指定前2名排序

5. dataFrame的索引

5.1 t[:5]

5.2 t["W"]

5.3 loc & iloc

5.4 t.loc[:, "Y"]

5.5 t.loc[["a","b"]]

5.6 t.loc[:,["X","Y"]]

5.7 t.loc[["a","b"],["X","Y"]]

5.8 t.iloc[1,:]

5.9 t.iloc[:,2]

5.10 t.iloc[:,[2,1]]

5.11 t.iloc[[0,2],[2,1]]

5.12 t.iloc[1:,:2]

5.13 t.iloc[1:,:2] = np.nan

6. bool索引和缺失数据的处理

6.1 t[(10 < t["W"]) & (t["W"] < 20)]

6.2 t[(6 == t["W"]) | (t["W"] == 9)]

6.3 t2["name"].str.split("/")

6.4 转换数据类型为list列表

6.5 缺失数据的处理

6.6 pd.isnull(t1) & pd.notnull(t1)

6.7 t1[pd.notnull(t1["W"])]

6.8 dropna 删除NaN的行

6.9 t1.fillna(0)

6.10 t1.fillna(t1.mean())

6.11 t1["X"].fillna(t1["X"].mean())

7. pandas中的常用统计方法

描述性统计:

7.1 df.describe()

7.2 df.mean()

7.3 df.median()

7.4 df.std()

7.5 df.var()

7.6 df.min() 和 df.max()

7.7 df.sum()

7.8 df.count()

7.9 df.quantile(q)

聚合和分组统计:

7.10 df.groupby('column').mean()

7.10.1 分组统计案例

7.11 df.groupby('column').agg({'col1': 'mean', 'col2': 'sum'})

7.12 df.pivot_table(values='col1', index='col2', columns='col3', aggfunc='mean')

其他常用统计方法:

7.13 df.corr()

7.14 df.cov()

7.15 df.value_counts()

7.16 df.unique()

7.17 df.nunique()

7.18 df.mode()

# 数据的合并和分组聚合

8. 离散化及其在 Pandas 中的实现方法

9. 数据合并

9.1 t1.join(t2)

9.2 merge方法

9.3 t1.merge(t2, on="B")

9.4 t1.merge(t2, how="outer", on="B")

9.5 how="left" & how="right"

10. 数据分组聚合

11. 数据的索引学习

11.1 index & reindex

11.2 t1.set_index("A")

11.3 t1.set_index("A").index

11.4 t1.set_index("A", drop=False)

11.5 t1["A"].unique()

11.6 a.set_index(["c", "d"]

索引练习:

11.7 b.swaplevel()

11.8 series.Series :索引类型

11.9 frame.DataFrame

11.10 c["one"] & c["one"]["bar"]

11.11 b.loc["one"].loc["bar"]

11.12 b.swaplevel().loc["bar"]


# 开篇

pandas可以读取SQL;pd.read_sql(sql_sentence,connection

类型转换: map(int, a)

  • map是一个 Python 内置函数;
  • map() 的使用示例,用于将一个可迭代对象 a 中的每个元素都应用 int() 函数进行转换;
  • 在 Python 中,a 可以是任何可迭代对象,包括但不限于:
  1. 列表(List): 最常见的可迭代对象之一,包含多个元素的有序集合。
  2. 元组(Tuple): 与列表类似,但元组是不可变的序列。
  3. 集合(Set): 无序且不重复的元素集合。
  4. 字符串(String): 字符的有序集合。
  5. 字典(Dictionary): 包含键值对的集合,map() 可以应用于字典的键或值。

1. pandas的series的了解

  • pandas的使用:

    numpy帮我们处理的是数值型的数据,无法处理除数值型之外的类型,而pandas除了处理数值之外(基于numpy),还能帮我们处理其它类型的数据;

  • pandas的常用数据类型:

    Series一维,带标签数组;

    DataFrame二维,Series容器;

1.1 pd.Series 创建

import pandas as pd
import numpy as np
import string

# t = pd.Series(np.arange(10))
t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))  # 创建Series
print(t)
print("*" * 100)
print(type(t))

1.2 pd.series 的索引使用

索引默认0开始;

t = pd.Series([1, 2, 3, 1, 2, 3])
print(type(t))
print(t)

索引默认0开始,但是可以手动指定索引;

t = pd.Series([1, 2, 3, 1, 2, 3], index=list("abcdef"))
print(type(t))
print("*" * 100)
print(t)

1.3 pd.series 之字典/索引

通过字典创建一个Series,其中的索引就是字典的键;

重新给其指定其它索引之后,如果能够对应上,就取其值,如果不能,就为Nan;

temp_dict = {"name": "yiyi", "age": 30, "tel": 1186}
t3 = pd.Series(temp_dict)
print(t3)

1.4 pandas 转换数据类型

temp_dict = {"name": "yiyi", "age": 30, "tel": 1186}
t3 = pd.Series(temp_dict)  # 创建Series
print(t3)
print("*" * 100)

t = pd.Series([1, 2, 3, 1, 2, 3], index=list("abcdef"))
print(t.dtype)
print("*" * 100)
t4 = t.astype(float)  # 转换数据类型
print(t4)
print("*" * 100)
print(t4.dtype)

1.5 pandas 通过索引或者通过位置来取值

temp_dict = {"name": "yiyi", "age": 30, "tel": 1186}
t3 = pd.Series(temp_dict)  # 创建Series

print(t3["name"])  # 根据索引key获取数据
print(t3[0])  # 根据索引下标获取数据

1.6 pandas 指定行取值

temp_dict = {"name": "yiyi", "age": 30, "tel": 1186}
t3 = pd.Series(temp_dict)  # 创建Series
print(t3[:2])  # 获取前2个数据

t3[:2] :代表2前面的所有行被取出;

t3[["key1","key2"]] :根据key取值;

t3[[1, 2]] :根据位置取值;

如果不存在该key,那么取出来的就会是NaN的值;

temp_dict = {"name": "yiyi", "age": 30, "tel": 1186}
t3 = pd.Series(temp_dict)  # 创建Series
print(t3[:2])  # 获取前2个数据
print("*" * 100)
print(t3[[1, 2]])  # 获取指定索引的数据
print("*" * 100)
print(t3[["age", "tel"]])  # 获取指定索引的数据

1.7 pands之Series 切片和索引

切片:直接传入start end或者步长即可;

索引:一个的时候直接传入序号或者index,多个的时候传入序号或者index的列表;

1. t[2:10:2] :从2开始到10结束,步长为2

t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))  # 创建Series
print(t)
print("*" * 100)
print(t[2:10:2])  # 从2开始到10结束,步长为2

2. t[[2, 3, 6]] :只获取2,3,6的数据

t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))  # 创建Series
print(t)
print("*" * 100)
print(t[[2, 3, 6]])  # 获取指定索引的数据

3. t["F"] :根据key获取数据

t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))  # 创建Series
print(t)
print("*" * 100)
print(t["F"])  # 获取指定索引的数据

1.8 pands之Series 的索引和值

  • Series对象本质上有两个数组构成,一个数组构成对象的键(index,索引),一个数组构成对象的值(value)

    键→值

  • ndarray 的很多方法都可以运用于series 类型,比如argmax,clip
  • series 具有where 方法,但是结果和ndarray 不同;
t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))  # 创建Series
print(t.index)  # 获取Series的索引
print(type(t.index))  # 获取Series的索引下标类型
print("*" * 100)
print(t.values)  # 获取Series的值
print(type(t.values))  # 获取Series的值类型

各种方法:

list(t.index)[:2] :先获取所有的index,取2前面的所有行

t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))  # 创建Series
print(type(t.index))  # 获取Series的索引下标类型
print(len(t.index))  # 获取Series的索引下标长度
print(list(t.index))  # 获取Series的索引下标
print(list(t.index)[:2])  # 指定获取Series的索引下标

2. pandas读取外部数据/sql/mongodb

2.1 read_csv 读取csv文件

pd.read_csv("../youyube_video_data/GBvideos-pandas.csv") :读取csv文件

  • 除了cvs文件外,还可以读取SQL,MongoDB的文件内容:
    • from pymongo import MongoClient 导包;
    • pd.Series(t) 读取;
  • 不同列索引的情况下,也不会影响这些数据转成DataFrame:
    • df = pd.DataFrame(data) 转换
df = pd.read_csv("../youyube_video_data/GBvideos-pandas.csv")  # 读取csv文件
print(df)

3. pandas的dataFrame的创建

3.1 pd.DataFrame 的创建

  • DataFrame对象既有行索引,又有列索引:
    • 行索引,表明不同行,横向索引,叫index,0轴,axis=0;
    • 列索引,表明不同列,纵向索引,叫columns,1轴,axis=1;
t = pd.DataFrame(np.arange(12).reshape((3, 4)))
print(t)

3.2 DataFrame指定行索引,指定列索引

t = pd.DataFrame(np.arange(12).reshape((3, 4)), index=list("abc"), columns=list("WXYZ"))
print(t)

3.3 DataFrame切片操作

d1 = {"name": ["yiYi", "zhangSan"], "age": [24, 28], "tel": [1186, 1185]}
print(pd.DataFrame(d1))  # 创建DataFrame

3.4 字典转成DataFrame

d1 = [{"name": "yiYi", "age": 24, "tel": 1186}, {"name": "zhangSan", "age": 28}, {"name": "wangWu", "age": 30}]
print(d1)
print("*" * 100)
print(pd.DataFrame(d1))  # 将列表转换为DataFrame

4. Dataframe的描述信息

  • DataFrame的基础属性:

    df.shape # 行数 列数

    df.dtypes # 列数据类型

    df.ndim # 数据维度

    df.index # 行索引

    df.columns # 列索引

    df.values # 对象值,二维ndarray数组

  • DataFrame整体情况查询:

    df.head(3) # 显示头部几行,默认5

    df.tail(3) # 显示末尾几行,默认5行

    df.info() # 相关信息概览:行数,列数,列索引,列非空值个数,列类型,内存占用

    df.describe() # 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值

4.1 sort_values 排序

df.sort_values(by="W", ascending=False) :排序,by

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值