基础概念

  • DataFrame,相当于一个数据表,存储了所有的数据,包含行和命名的列
  • Series,相当于一个列,一个DataFrame有一个或者多个Series

简单地建立一个Series:

pd.Series(['San Francisco', 'San Jose', 'Sacramento'])

DataFrame可以通过字典的方式,来映射列的名和列的编号,比如:

city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
population = pd.Series([852469, 1015785, 485199])test = pd.DataFrame({ 'City name': city_names, 'Population': population })print(test)

得到如下输出:

       City name  Population
0  San Francisco      852469
1       San Jose     1015785
2     Sacramento      485199

如果我们只是想输出数据集的前几行,可以使用head属性,默认输出前五行。

print(test.head(1))

输出:

       City name  Population
0  San Francisco      852469

字典数据可以进行pandas化,那么反过来,pandas数据也可以进行字典化,一上面的数据为例子:

import pandas as pdcity_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
population = pd.Series([852469, 1015785, 485199])my_data = pd.DataFrame({'City name': city_names, 'Population': population})my_dic = dict(my_data)
print(my_dic)

输出结果:

{'City name': 0    San Francisco
1         San Jose
2       Sacramento
Name: City name, dtype: object, 'Population': 0     852469
1    1015785
2     485199
Name: Population, dtype: int64}

总结一下,pandas可以看成一个高阶的字典类型的数据(可能不是十分恰当)

获取数据

可以通过字典的方式引用列,支持索引和切片操作。
比如:

print(test['City name'])
print(test['City name'][1])
print(test['City name'][0:2])

输出结果

0    San Francisco
1         San Jose
2       Sacramento
Name: City name, dtype: object
San Jose
0    San Francisco
1         San Jose
Name: City name, dtype: object

使用describe输出详细信息:

print(test.describe())

输出:

count    3.000000e+00
mean     7.844843e+05
std      2.717477e+05
min      4.851990e+05
25%      6.688340e+05
50%      8.524690e+05
75%      9.341270e+05
max      1.015785e+06
dtype: float64

操作数据

  1. 支持一般的python数值计算
  2. 支持numpy库函数的计算
  3. 支持类似于python的map操作,需要使用apply方法:
    print(population.apply(lambda x: x > 1000000))
    ```
    

把子列转化成新的Dataframe数据

把一列数据转换成新的Dataframe类型 。使用两个[]表示转换成一个新的DataFrame,否则就是单纯地取出一个Series

import pandas as pdc1 = pd.Series(['a', 'b', 'c', 'd'])
c2 = pd.Series([1, 2, 3, 4])
c3 = pd.Series(['A', 'B', 'C', 'D'])
data = pd.DataFrame({'c1': c1, 'c2': c2, 'c3': c3})print(data)
print(type(data))tmp = data['c1']  # 仅仅使用一个中括号
print(tmp)
print(type(tmp))tmp1 = data[['c1']]  # 使用两层中括号
print(tmp1)
print(type(tmp1))tmp2 = data[['c1', 'c2']]
print(tmp2)
print(type(tmp2))

结果

  c1  c2 c3
0  a   1  A
1  b   2  B
2  c   3  C
3  d   4  D
<class 'pandas.core.frame.DataFrame'>
0    a
1    b
2    c
3    d
Name: c1, dtype: object
<class 'pandas.core.series.Series'>c1
0  a
1  b
2  c
3  d
<class 'pandas.core.frame.DataFrame'>c1  c2
0  a   1
1  b   2
2  c   3
3  d   4
<class 'pandas.core.frame.DataFrame'>

乱序操作

使用pandas.reindex即可进行乱序操作。根据下标从小到大排列。比如:

import pandas as pd
city = pd.Series(['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'])
population = pd.Series([2000, 1000, 1500, 800])
square = pd.Series([100.4, 86.6, 77.8, 91.3])
city_info = pd.DataFrame(['City':city, 'Population':population, 'Square':square])print(city_info)
# 指定乱序
city_info.reindex([3, 1, 2])
print(city_info)
# 随机乱序
city_info.reindex(np.random.permutation.permutation(city_info.size))
print(city_info)

取出分位数

pd.quantile是取出分位数,这在数据数据分区间时,非常有用。给出官网的代码示例:

import pandas as pd
import numpy as npdf = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),columns=['a', 'b'])data1 = df.quantile(.1)
data2 = df.quantile(([.1, .5]))print(type(data1))
print(data1)
print("----------")
print(type(data2))
print(data2)

程序输出结果:

<class 'pandas.core.series.Series'>
a    1.3
b    3.7
Name: 0.1, dtype: float64
----------
<class 'pandas.core.frame.DataFrame'>a     b
0.1  1.3   3.7
0.5  2.5  55.0

如果只是单纯的一个数,那么返回的是一个Series,对应有关列的分位数。如果是一个列表,那么返回一个DataFrame,对应的是每个列不同分位数所对应的值。

读取数据和存储数据

从网络或者本地文件中读取csv数据,或者把已有的数据存到csv文件中。一般和os配合使用

import os
import pandas as pdmy_data = None
#  先判断是否存在文件,不存在直接从网络下载,存在的话直接读取
if os.path.exists('data.csv'):my_data = pd.read_csv('data.csv', sep=",")
else:my_data = pd.read_csv("https://storage.googleapis.com/mledu-datasets/california_housing_train.csv",sep=",")my_data.to_csv('data.csv')

另一种从文件中读取数据的方式:

import os
import pandas as pd
import numpy as npN = 2if os.path.exists('my_data.csv'):my_data = pd.read_csv('my_data.csv')
else:c1 = 20 * np.ones(N) + np.random.randn(N) * 2.0  # 20-25的正太分布c2 = 3 * np.ones(N) + np.random.randn(N)  # 3-4的正太分布c3 = -7 * np.ones(N) + np.random.randn(N)  # -6~-7正太res = c1 + c2 + c3c1 = pd.Series(c1)c2 = pd.Series(c2)c3 = pd.Series(c3)res = pd.Series(res)my_data = pd.DataFrame({"res": res, "c1": c1, "c2": c2, "c3": c3})my_data.to_csv('my_data.csv')
# 自定义命名列,从第0行开始读取
tmp = pd.read_csv(filepath_or_buffer='my_data.csv', names=['c1', 'c2', 'c3', 'res'], header=0)
print(tmp)

注意,上述方法中,如果新命名的数据列与原来的数据列不一致,那么会以新命名的数据列为准!!

插入和删除列(行)

pop弹出一列

弹出制定的列,并返回。

import pandas as pdc1 = pd.Series(['a', 'b', 'c', 'd'])
c2 = pd.Series([1, 2, 3, 4])
c3 = pd.Series(['A', 'B', 'C', 'D'])
data = pd.DataFrame({'c1': c1, 'c2': c2, 'c3': c3})tmp = data.pop('c1')  # Series类型print(tmp)
print(type(tmp))print(data)

输出结果:

0    a
1    b
2    c
3    d
Name: c1, dtype: object
<class 'pandas.core.series.Series'>c2 c3
0   1  A
1   2  B
2   3  C
3   4  D

insert插入数据

在制定的位置插入一列数据

import pandas as pdc1 = pd.Series(['a', 'b', 'c', 'd'])
c2 = pd.Series([1, 2, 3, 4])
c3 = pd.Series(['A', 'B', 'C', 'D'])
data = pd.DataFrame({'c1': c1, 'c2': c2, 'c3': c3})
data.pop('c1')  # 删除第一列
data.insert(loc=0, column='c1', value=c1)  # 重新插入到第一列
print(data)

drop删除数据

import pandas as pdc1 = pd.Series(['a', 'b', 'c', 'd'])
c2 = pd.Series([1, 2, 3, 4])
c3 = pd.Series(['A', 'B', 'C', 'D'])
data = pd.DataFrame({'c1': c1, 'c2': c2, 'c3': c3})# 列的名称,axis=1表示对列进行删除,axis=0表示删除行,需要添加行的索引;inplace=True表示在原数据上操作
data.drop(columns='c1', axis=1, inplace=True)
print(data)

输出:

   c2 c3
0   1  A
1   2  B
2   3  C
3   4  D

分位点和分位数

根据给定的分位数,计算出分位点,函数pd.Datafrane.quantile()

import pandas as pd
import numpy as npdf4 = pd.DataFrame(np.arange(100).reshape(20, 5),columns=list('abcde'))
print(df4)for i in np.arange(0, 1, 0.2):print(df4.quantile(i))

输出每一列的分位点:

a   b   c   d   e
0    0   1   2   3   4
1    5   6   7   8   9
2   10  11  12  13  14
3   15  16  17  18  19
4   20  21  22  23  24
5   25  26  27  28  29
6   30  31  32  33  34
7   35  36  37  38  39
8   40  41  42  43  44
9   45  46  47  48  49
10  50  51  52  53  54
11  55  56  57  58  59
12  60  61  62  63  64
13  65  66  67  68  69
14  70  71  72  73  74
15  75  76  77  78  79
16  80  81  82  83  84
17  85  86  87  88  89
18  90  91  92  93  94
19  95  96  97  98  99
a    0.0
b    1.0
c    2.0
d    3.0
e    4.0
Name: 0.0, dtype: float64
a    19.0
b    20.0
c    21.0
d    22.0
e    23.0
Name: 0.2, dtype: float64
a    38.0
b    39.0
c    40.0
d    41.0
e    42.0
Name: 0.4, dtype: float64
a    57.0
b    58.0
c    59.0
d    60.0
e    61.0
Name: 0.6000000000000001, dtype: float64
a    76.0
b    77.0
c    78.0
d    79.0
e    80.0
Name: 0.8, dtype: float64

还可以求解多个分位点,用np.array传入数据:

import numpy as np
import pandas as pdnum_buckets = 10
df = pd.DataFrame(np.arange(100).reshape(10, 10))
boundaries = np.arange(1.0, num_buckets) / num_buckets
print(boundaries)
print(df)
quantitles = df.quantile(boundaries)
print(quantitles)

输出结果:

[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]0   1   2   3   4   5   6   7   8   9
0   0   1   2   3   4   5   6   7   8   9
1  10  11  12  13  14  15  16  17  18  19
2  20  21  22  23  24  25  26  27  28  29
3  30  31  32  33  34  35  36  37  38  39
4  40  41  42  43  44  45  46  47  48  49
5  50  51  52  53  54  55  56  57  58  59
6  60  61  62  63  64  65  66  67  68  69
7  70  71  72  73  74  75  76  77  78  79
8  80  81  82  83  84  85  86  87  88  89
9  90  91  92  93  94  95  96  97  98  990     1     2     3     4     5     6     7     8     9
0.1   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
0.2  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0  27.0
0.3  27.0  28.0  29.0  30.0  31.0  32.0  33.0  34.0  35.0  36.0
0.4  36.0  37.0  38.0  39.0  40.0  41.0  42.0  43.0  44.0  45.0
0.5  45.0  46.0  47.0  48.0  49.0  50.0  51.0  52.0  53.0  54.0
0.6  54.0  55.0  56.0  57.0  58.0  59.0  60.0  61.0  62.0  63.0
0.7  63.0  64.0  65.0  66.0  67.0  68.0  69.0  70.0  71.0  72.0
0.8  72.0  73.0  74.0  75.0  76.0  77.0  78.0  79.0  80.0  81.0
0.9  81.0  82.0  83.0  84.0  85.0  86.0  87.0  88.0  89.0  90.0

显示了每一个列的,的对应的分位点。

pandas库基础笔记相关推荐

  1. Python 数据分析与展示笔记4 -- Pandas 库基础

    Python 数据分析与展示笔记4 – Pandas 库基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考 ...

  2. pandas库基础学习

    pandas库基础学习 1.Pandas模块的数据结构 Pandas模块的数据结构主要有两种: Series DataFrame Series 是一维数组,基于Numpy的ndarray 结构 Dat ...

  3. 数据分析一、 pandas库基础知识

    pandas库基础知识 一.jupyter 代码编辑器 概述:Python 数据分析库介绍 二.pandas 库基础知识 (1)常用的Series属性与方法: (2) DataFrame常用方法 1. ...

  4. python中不能使用索引运算的是_Python数据分析之Pandas库(笔记)

    Pandas数据结构 pandas有两个基本的数据结构:Series和DataFrame. 1.1 创建Series数据 需要引入pandas模块:import pandas as pd 需要引入Se ...

  5. Pandas库学习笔记

    import pandas as pd 两个数据类型:Series,DataFrame pandas是基于Numpy实现的扩展库,提供了高效地操作大型数据集所需的工具. Series类型由一组数据和与 ...

  6. Python之pandas库--基础

    目录 创建新的工作簿 新建工作簿同时写入数据 设置索引 读取数据 txt和CSV文件转化 读取数据库内容 pandas数据结构 DataFrame用法 实现VLOOKUP功能 需求:将总分调整顺序,放 ...

  7. Pandas 统计分析基础 笔记4 任务4.4 使用分组聚合进行组内计算

    文章目录 pandas_任务4.4 使用分组聚合进行组内计算 4.4.1 使用groupby方法拆分数据 代码 4-51 对菜品订单详情表依据订单编号分组 代码 4-52 GroupBy 类求均值,标 ...

  8. Pandas 统计分析基础 笔记5 _任务4.5 创建透视表与交叉表

    文章目录 pandas__任务4.5 创建透视表与交叉表 4.5 创建透视表与交叉表 代码4-67 使用订单号作为透视表索引制作透视表 代码 4-68 修改聚合函数后的透视表 代码 4-69 使用订单 ...

  9. Pandas 统计分析基础 笔记2 任务4.2 掌握DataFrame的常用操作

    文章目录 pandas_任务4.2 掌握DataFrame的常用操作 代码4-12 订单详情表的4个基本属性 4-13 size,ndim,shape属性的使用 4-14 使用T属性进行转置 4-15 ...

最新文章

  1. java 手机音频播放,用Java实现音频播放
  2. 视频监控软件 SecuritySpy 简介
  3. 2020亚太杯数学建模_比赛 | 2020年APMCM亚太地区大学生数学建模竞赛
  4. hdu区域赛在线热身赛 暨 第十二场组队赛
  5. oracle dg物理和逻辑,Oracle DG介绍(物理无实例)
  6. AndroidStudio_android中实现图片动态设置图片的位置以及图片动态缩放---Android原生开发工作笔记234
  7. 人民日报发推欢迎Google重返大陆,FB上长文阐述详细立场
  8. 比较nio大体上优于io的方面
  9. qt deleterLater
  10. 海量数据存储的解决方案(分布式数据库)
  11. Centos 7.9系统安装网卡驱动
  12. mysql随机生成 姓名+电话
  13. 2015年动画电影观影指南
  14. 【渝粤题库】陕西师范大学292161社会保障概论 作业(专升本)
  15. Linux网络——部署yum仓库
  16. SAP MM移动平均价和标准价逻辑
  17. 解读小米模式:颠覆式创新者的背后
  18. 博途TIA Portal V15 下载与安装教程
  19. libusb函数说明
  20. MySQL中什么是关系型数据库???

热门文章

  1. 【五级流水线CPU】—— 7. 协处理器访问指令(2条)
  2. JS小技巧 ----- 在onmousedown事件下避免文本选取
  3. UnicodeDecodeError: 'utf8' codec can't decode byte 0xd1 in position 0: invalid continuation byte问题
  4. Struts2一个诡异问题的解决
  5. PHP23 AJAX分页
  6. [hihocoder][Offer收割]编程练习赛46
  7. HDU 1422 重温世界杯 (dp)
  8. cocoapods的安装使用
  9. windows和linux下读取文件乱码的终极解决办法!
  10. LeetCode:Add Binary