Pandas库基本使用

P a n d a s 库 基 本 使 用 Pandas库基本使用 Pandas使

引子

Numpy 在向量化的数值计算中表现优异

但是在处理更灵活、复杂的数据任务:

如为数据添加标签、处理缺失值、分组和透视表等方面

Numpy显得力不从心

而基于Numpy构建的Pandas库,提供了使得数据分析变得更快更简单的高级数据结构和操作工具

1 对象创建

1.1 Pandas Series对象

Series 是带标签数据的一维数组

Series对象的创建

通用结构: pd.Series(data, index=index, dtype=dtype)

data:数据,可以是列表,字典或Numpy数组

index:索引,为可选参数

dtype: 数据类型,为可选参数

1、用列表创建

  • index缺省,默认为整数序列
import pandas as pd

data = pd.Series([1.5, 3, 4.5, 6])
data

在这里插入图片描述

  • 增加index
data = pd.Series([1.5, 3, 4.5, 6], index=["a", "b", "c", "d"])
data

在这里插入图片描述

  • 增加数据类型

    缺省则从传入的数据自动判断
    
data = pd.Series([1, 2, 3, 4], index=["a", "b", "c", "d"])    
data

在这里插入图片描述

data = pd.Series([1, 2, 3, 4], index=["a", "b", "c", "d"], dtype="float")
data

在这里插入图片描述

注意:数据支持多种类型

data = pd.Series([1, 2, "3", 4], index=["a", "b", "c", "d"])
data

在这里插入图片描述

data["a"]

在这里插入图片描述

data["c"]

在这里插入图片描述

数据类型可被强制改变

data = pd.Series([1, 2, "3", 4], index=["a", "b", "c", "d"], dtype=float)
data

在这里插入图片描述

data["c"]

在这里插入图片描述

data = pd.Series([1, 2, "a", 4], index=["a", "b", "c", "d"], dtype=float)
data

2、用一维numpy数组创建

import numpy as np

x = np.arange(5)
pd.Series(x)

在这里插入图片描述
3、用字典创建

  • 默认以键为index 值为data
population_dict = {"BeiJing": 2154,
                   "ShangHai": 2424,
                   "ShenZhen": 1303,
                   "HangZhou": 981 }
population = pd.Series(population_dict)    
population

在这里插入图片描述

  • 字典创建,如果指定index,则会到字典的键中筛选,找不到的,值设为NaN
population = pd.Series(population_dict, index=["BeiJing", "HangZhou", "c", "d"])    
population

在这里插入图片描述

4、data为标量的情况

pd.Series(5, index=[100, 200, 300])

在这里插入图片描述

1.2 Pandas DataFrame对象

DataFrame 是带标签数据的多维数组

DataFrame对象的创建

通用结构: pd.DataFrame(data, index=index, columns=columns)

data:数据,可以是列表,字典或Numpy数组

index:索引,为可选参数

columns: 列标签,为可选参数

1、通过Series对象创建

population_dict = {"BeiJing": 2154,
                   "ShangHai": 2424,
                   "ShenZhen": 1303,
                   "HangZhou": 981 }

population = pd.Series(population_dict)    
pd.DataFrame(population)

在这里插入图片描述

pd.DataFrame(population, columns=["population"])

在这里插入图片描述
2、通过Series对象字典创建

GDP_dict = {"BeiJing": 30320,
            "ShangHai": 32680,
            "ShenZhen": 24222,
            "HangZhou": 13468 }

GDP = pd.Series(GDP_dict)
GDP

在这里插入图片描述

pd.DataFrame({"population": population,
              "GDP": GDP})

在这里插入图片描述
注意:数量不够的会自动补齐

pd.DataFrame({"population": population,
              "GDP": GDP,
              "country": "China"})

在这里插入图片描述
3、通过字典列表对象创建

  • 字典索引作为index,字典键作为columns
import numpy as np
import pandas as pd

data = [{"a": i, "b": 2*i} for i in range(3)]
data

在这里插入图片描述

data = pd.DataFrame(data)
data

在这里插入图片描述

data1 = data["a"].copy()
data1

在这里插入图片描述

data1[0] = 10
data1

在这里插入图片描述

data

在这里插入图片描述

  • 不存在的键,会默认值为NaN
data = [{"a": 1, "b":1},{"b": 3, "c":4}]
data

在这里插入图片描述

pd.DataFrame(data)

在这里插入图片描述

4、通过Numpy二维数组创建

data = np.random.randint(10, size=(3, 2))
data

在这里插入图片描述

pd.DataFrame(data, columns=["foo", "bar"], index=["a", "b", "c"])

在这里插入图片描述

2 DataFrame性质

1、属性

data = pd.DataFrame({"pop": population, "GDP": GDP})
data

在这里插入图片描述

(1)df.values 返回numpy数组表示的数据

data.values

在这里插入图片描述
(2)df.index 返回行索引

data.index

在这里插入图片描述
(3)df.columns 返回列索引

data.columns

在这里插入图片描述
(4)df.shape 形状

data.shape

在这里插入图片描述
(5) pd.size 大小

data.size

在这里插入图片描述
(6)pd.dtypes 返回每列数据类型

data.dtypes

在这里插入图片描述

2、索引

data

在这里插入图片描述
(1)获取列

  • 字典式
data["pop"]

在这里插入图片描述

data[["GDP", "pop"]]

在这里插入图片描述

  • 对象属性式
data.GDP

在这里插入图片描述
(2)获取行

  • 绝对索引 df.loc
data.loc["BeiJing"]

在这里插入图片描述

data.loc[["BeiJing", "HangZhou"]]

在这里插入图片描述

  • 相对索引 df.iloc
data

在这里插入图片描述

data.iloc[0]

在这里插入图片描述

data.iloc[[1, 3]]

在这里插入图片描述
(3)获取标量

data

在这里插入图片描述

data.loc["BeiJing", "GDP"]

在这里插入图片描述

data.iloc[0, 1]

在这里插入图片描述

data.values[0][1]

在这里插入图片描述
(4)Series对象的索引

type(data.GDP)

在这里插入图片描述

GDP

在这里插入图片描述

GDP["BeiJing"]

在这里插入图片描述

3、切片

dates = pd.date_range(start='2019-01-01', periods=6)
dates

在这里插入图片描述

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=["A", "B", "C", "D"])
df

在这里插入图片描述

(1)行切片

df["2019-01-01": "2019-01-03"]

在这里插入图片描述

df.loc["2019-01-01": "2019-01-03"]

在这里插入图片描述

df.iloc[0: 3]

在这里插入图片描述

(2)列切片

df

在这里插入图片描述

df.loc[:, "A": "C"]

在这里插入图片描述

df.iloc[:, 0: 3]

在这里插入图片描述
(3)多种多样的取值

df

在这里插入图片描述

* 行、列同时切片
df.loc["2019-01-02": "2019-01-03", "C":"D"]

在这里插入图片描述

df.iloc[1: 3, 2:]

在这里插入图片描述

  • 行切片,列分散取值
df.loc["2019-01-04": "2019-01-06", ["A", "C"]]

在这里插入图片描述

df.iloc[3:, [0, 2]]

在这里插入图片描述

  • 行分散取值,列切片
df.loc[["2019-01-02", "2019-01-06"], "C": "D"]
df.iloc[[1, 5], 0: 3]

在这里插入图片描述

  • 行、列均分散取值
df.loc[["2019-01-04", "2019-01-06"], ["A", "D"]]
df.iloc[[1, 5], [0, 3]]

在这里插入图片描述
4、布尔索引

df

在这里插入图片描述

df > 0

在这里插入图片描述

df[df > 0]

在这里插入图片描述

df.A > 0

在这里插入图片描述

df[df.A > 0]

在这里插入图片描述

  • isin()方法
df2 = df.copy()
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
df2

在这里插入图片描述

ind = df2["E"].isin(["two", "four"])
ind     

在这里插入图片描述

df2[ind]

在这里插入图片描述
(5)赋值

df
  • DataFrame 增加新列
s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20190101', periods=6))
s1

在这里插入图片描述

df["E"] = s1
df

在这里插入图片描述

  • 修改赋值
df.loc["2019-01-01", "A"] = 0
df

在这里插入图片描述

df.iloc[0, 1] = 0
df

在这里插入图片描述

df["D"] = np.array([5]*len(df))   # 可简化成df["D"] = 5
df

在这里插入图片描述

  • 修改index和columns
df.index = [i for i in range(len(df))]
df

在这里插入图片描述

df.columns = [i for i in range(df.shape[1])]
df

在这里插入图片描述

3 数值运算及统计分析

1、数据的查看

import pandas as pd
import numpy as np

dates = pd.date_range(start='2019-01-01', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=["A", "B", "C", "D"])
df

在这里插入图片描述
(1)查看前面的行

df.head()    # 默认5行

在这里插入图片描述

df.head(2)

在这里插入图片描述
(2)查看后面的行

df.tail()    # 默认5行

在这里插入图片描述

df.tail(3) 

在这里插入图片描述
(3)查看总体信息

df.iloc[0, 3] = np.nan
df

在这里插入图片描述

df.info()

在这里插入图片描述
2、Numpy通用函数同样适用于Pandas

(1)向量化运算

x = pd.DataFrame(np.arange(4).reshape(1, 4))
x

在这里插入图片描述

x+5

在这里插入图片描述

np.exp(x)

在这里插入图片描述

y = pd.DataFrame(np.arange(4,8).reshape(1, 4))
y

在这里插入图片描述

x*y

在这里插入图片描述
(2)矩阵化运算

np.random.seed(42)
x = pd.DataFrame(np.random.randint(10, size=(30, 30)))
x

在这里插入图片描述

  • 转置
z = x.T
z

在这里插入图片描述

np.random.seed(1)
y = pd.DataFrame(np.random.randint(10, size=(30, 30)))
y

在这里插入图片描述

x.dot(y)

在这里插入图片描述

%timeit x.dot(y)

在这里插入图片描述

%timeit np.dot(x, y)

在这里插入图片描述

  • 执行相同运算,Numpy与Pandas的对比
x1 = np.array(x)
x1
y1 = np.array(y)
y1
%timeit x1.dot(y1)

在这里插入图片描述

%timeit np.dot(x1, y1)

在这里插入图片描述

%timeit np.dot(x.values, y.values)

在这里插入图片描述

x2 = list(x1)
y2 = list(y1)
x3 = []
y3 = []
for i in x2:
    res = []
    for j in i:
        res.append(int(j))
    x3.append(res)
for i in y2:
    res = []
    for j in i:
        res.append(int(j))
    y3.append(res)
def f(x, y):
    res = []
    for i in range(len(x)):
        row = []
        for j in range(len(y[0])):
            sum_row = 0
            for k in range(len(x[0])):
                sum_row += x[i][k]*y[k][j]
            row.append(sum_row)
        res.append(row)
    return res          
%timeit f(x3, y3)

在这里插入图片描述
一般来说,纯粹的计算在Numpy里执行的更快

Numpy更侧重于计算,Pandas更侧重于数据处理

(3)广播运算

np.random.seed(42)
x = pd.DataFrame(np.random.randint(10, size=(3, 3)), columns=list("ABC"))
x

在这里插入图片描述

  • 按行广播
x.iloc[0]

在这里插入图片描述

x/x.iloc[0]

在这里插入图片描述

  • 按列广播
x.A

在这里插入图片描述

x.div(x.A, axis=0)             # add sub div mul

在这里插入图片描述

x.div(x.iloc[0], axis=1)

在这里插入图片描述
3、新的用法

(1)索引对齐

A = pd.DataFrame(np.random.randint(0, 20, size=(2, 2)), columns=list("AB"))
A

在这里插入图片描述

B = pd.DataFrame(np.random.randint(0, 10, size=(3, 3)), columns=list("ABC"))
B

在这里插入图片描述

  • pandas会自动对齐两个对象的索引,没有的值用np.nan表示
A+B

在这里插入图片描述

  • 缺省值也可用fill_value来填充
A.add(B, fill_value=0)

在这里插入图片描述

A*B

在这里插入图片描述
(2)统计相关

  • 数据种类统计
y = np.random.randint(3, size=20)
y

在这里插入图片描述

np.unique(y)

在这里插入图片描述

from collections import Counter
Counter(y)

在这里插入图片描述

y1 = pd.DataFrame(y, columns=["A"])
y1

在这里插入图片描述

np.unique(y1)

在这里插入图片描述

y1["A"].value_counts()

在这里插入图片描述

  • 产生新的结果,并进行排序
population_dict = {"BeiJing": 2154,
                   "ShangHai": 2424,
                   "ShenZhen": 1303,
                   "HangZhou": 981 }
population = pd.Series(population_dict) 

GDP_dict = {"BeiJing": 30320,
            "ShangHai": 32680,
            "ShenZhen": 24222,
            "HangZhou": 13468 }
GDP = pd.Series(GDP_dict)

city_info = pd.DataFrame({"population": population,"GDP": GDP})
city_info

在这里插入图片描述

city_info["per_GDP"] = city_info["GDP"]/city_info["population"]
city_info

在这里插入图片描述
递增排序

city_info.sort_values(by="per_GDP")

在这里插入图片描述
递减排序

city_info.sort_values(by="per_GDP", ascending=False)

在这里插入图片描述
按轴进行排序

data = pd.DataFrame(np.random.randint(20, size=(3, 4)), index=[2, 1, 0], columns=list("CBAD"))
data

在这里插入图片描述
行排序

data.sort_index()

在这里插入图片描述
列排序

data.sort_index(axis=1)

在这里插入图片描述

data.sort_index(axis=1, ascending=False)

在这里插入图片描述

  • 统计方法
df = pd.DataFrame(np.random.normal(2, 4, size=(6, 4)),columns=list("ABCD"))
df

在这里插入图片描述
非空个数

df.count()

在这里插入图片描述
求和

df.sum()

在这里插入图片描述

df.sum(axis=1)

在这里插入图片描述
最大值 最小值

df.min()

在这里插入图片描述

df.max(axis=1)

在这里插入图片描述

df

在这里插入图片描述

df.idxmax()

在这里插入图片描述
均值

df.mean()

在这里插入图片描述
方差

df.var()

在这里插入图片描述
标准差

df.std()

在这里插入图片描述
中位数

df.median()

在这里插入图片描述
众数

data = pd.DataFrame(np.random.randint(5, size=(10, 2)), columns=list("AB"))
data
  • 22
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Pandas的第一步是导入该。通常的做法是使用import语句导入Pandas,并给它起一个别名,比如import pandas as pd。 Pandas是Python中一个非常流行的数据处理,它提供了一些强大的数据结构和数据分析工具,可以帮助我们更方便、快捷地处理数据。 在使用Pandas之前,我们需要先生成数据表。可以使用Pandas提供的函数来导入CSV或者xlsx文件。例如,可以使用pd.read_csv函数导入CSV文件,或者使用pd.read_excel函数导入xlsx文件。导入之后,可以使用pd.DataFrame函数创建一个数据表。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pandas基本使用方法](https://blog.csdn.net/weixin_46991302/article/details/129764373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pandas用法-全网最详细教程](https://blog.csdn.net/Strive_For_Future/article/details/126710810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值