限于博客的内容以及阅读体验,一篇博客不能写尽所有的 Pandas 内容,也不现实,因此分篇撰写 Pandas 内容以及其他常用 Python库的解析,有兴趣的小伙伴可以关注 Python Libary库专栏 了解更多内容

Pandas 官网链接:https://www.pypandas.cn/

Pandas 作为一个开源的强大的分析结构化数据的工具集, 能够进行高性能的数据处理与分析,但是 Pandas数学功能天生不足,目前只支持一些简单的回归方法,但是Pandas 可以非常高效的连接与合并数据集,支持丰富的输入输出文本格式,包括直接内存读写、CSV、Excel、纯文本、SQL 和 HDF5格式。

文章目录

  • 1、数据结构
    • Series
    • DataFrame
    • 大小可变与数据复制
  • 2、数据输入 / 输出
    • CSV
    • HDF5
    • Excel
    • Numpy
  • 3、查看数据
    • 显示索引:
    • .head & .tail
    • .to_numpy()
    • 速查摘要:.describe()
  • 4、增添数据
    • 插入列数据 Insert()
    • 添加行数据 append()
  • 5、排序
    • 转置数据:.T
    • 按轴排序:.sort_index
    • 按值排序:.sort_values
    • 搜索排序
    • 最大值与最小值
  • 6、选择
    • 获取数据
    • 按标签选择 .loc[ ]
    • 按位置选择 .iloc[ ]
    • 布尔索引
    • 过滤查询 query
    • 随机选取若干个行或列 .sample
    • 对数据 shuffle

1、数据结构

维数 名称 描述
1 Series 带标签的一维同构数组
2 DataFrame 带标签的,大小可变的,二维异构表格

注意!
Pandas 用 NaN(Not a Number)表示缺失数据。

Pandas类型与Python类型对比

Pandas类型 Python类型 说明
object string 最常用的数据类型
int64 int 整数
float64 float 带小数的数字
datatime64 datatime Python标准库包含datatime,默认不加载需导入

Series

Series 是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引。调用 pd.Series 函数即可创建 Series:

index 是轴标签列表

  • 多维数组
    data 是多维数组时,index 长度必须与 data 长度一致。没有指定 index 参数时,创建数值型索引,即 [0, …, len(data) - 1]。

  • 字典
    Series 可以用字典实例化:

  • Series 操作与 ndarray 类似,支持大多数 NumPy 函数,还支持索引切片。和 NumPy 数组一样,Series 也支持 dtype

DataFrame

DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据。

除了数据,还可以有选择地传递 index(行标签)和 columns(列标签)参数。传递了索引或列,就可以确保生成的 DataFrame 里包含索引或列。

处理 DataFrame 等表格数据时

  • index(行)
  • columns(列)
  • values (数据)

显示索引与列名

In [15]: df.index
Out[15]:
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'],dtype='datetime64[ns]', freq='D')In [16]: df.columns
Out[16]: Index(['A', 'B', 'C', 'D'], dtype='object')In [17]: df.values
Out[17]:
[[ 0.266457  -0.399641 -0.219582   1.186860][-1.170732  -0.345873  1.653061  -0.282953][-1.734933   0.530468  2.060811  -0.515536][-1.555121   1.452620  0.239859  -1.156896][ 0.578117   0.511371  0.103552  -2.428202][ 0.478344   0.449933 -0.741620  -1.962409][ 1.235339  -0.091757 -1.543861  -1.084753]]
  • 返回行数:df.shape[0] / len(df)
  • 返回列数:df.shape[1]

大小可变与数据复制

Pandas 所有数据结构的值都是可变的,但数据结构的大小并非都是可变的,比如,Series 的长度不可改变,但 DataFrame 里就可以插入列。

Pandas 里,绝大多数方法都不改变原始的输入数据,而是复制数据,生成新的对象。 一般来说,原始输入数据不变更稳妥。

2、数据输入 / 输出

CSV

写入 CSV 文件

In [143]: df.to_csv('foo.csv',index=False)

读取 CSV 文件数据:pandas.read_csv

In [144]: pd.read_csv('foo.csv',index_col=False)
Out[144]: Unnamed: 0          A          B         C          D
0    2000-01-01   0.266457  -0.399641 -0.219582   1.186860
1    2000-01-02  -1.170732  -0.345873  1.653061  -0.282953
2    2000-01-03  -1.734933   0.530468  2.060811  -0.515536
3    2000-01-04  -1.555121   1.452620  0.239859  -1.156896
4    2000-01-05   0.578117   0.511371  0.103552  -2.428202
5    2000-01-06   0.478344   0.449933 -0.741620  -1.962409
6    2000-01-07   1.235339  -0.091757 -1.543861  -1.084753
..          ...        ...        ...       ...        ...
993  2002-09-20 -10.628548  -9.153563 -7.883146  28.313940
994  2002-09-21 -10.390377  -8.727491 -6.399645  30.914107
995  2002-09-22  -8.985362  -8.485624 -4.669462  31.367740
996  2002-09-23  -9.558560  -8.781216 -4.499815  30.518439
997  2002-09-24  -9.902058  -9.340490 -4.386639  30.105593
998  2002-09-25 -10.216020  -9.480682 -3.933802  29.758560
999  2002-09-26 -11.856774 -10.671012 -3.216025  29.369368[1000 rows x 5 columns]

HDF5

写入 HDF5 Store:

In [145]: df.to_hdf('foo.h5', 'df')

读取 HDF5 Store:

In [146]: pd.read_hdf('foo.h5', 'df')
Out[146]: A          B         C          D
2000-01-01   0.266457  -0.399641 -0.219582   1.186860
2000-01-02  -1.170732  -0.345873  1.653061  -0.282953
2000-01-03  -1.734933   0.530468  2.060811  -0.515536
2000-01-04  -1.555121   1.452620  0.239859  -1.156896
2000-01-05   0.578117   0.511371  0.103552  -2.428202
2000-01-06   0.478344   0.449933 -0.741620  -1.962409
2000-01-07   1.235339  -0.091757 -1.543861  -1.084753
...               ...        ...       ...        ...
2002-09-20 -10.628548  -9.153563 -7.883146  28.313940
2002-09-21 -10.390377  -8.727491 -6.399645  30.914107
2002-09-22  -8.985362  -8.485624 -4.669462  31.367740
2002-09-23  -9.558560  -8.781216 -4.499815  30.518439
2002-09-24  -9.902058  -9.340490 -4.386639  30.105593
2002-09-25 -10.216020  -9.480682 -3.933802  29.758560
2002-09-26 -11.856774 -10.671012 -3.216025  29.369368[1000 rows x 4 columns]

Excel

写入 Excel 文件:

In [147]: df.to_excel('foo.xlsx', sheet_name='Sheet1')

读取 Excel 文件:

In [148]: pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])
Out[148]: Unnamed: 0          A          B         C          D
0   2000-01-01   0.266457  -0.399641 -0.219582   1.186860
1   2000-01-02  -1.170732  -0.345873  1.653061  -0.282953
2   2000-01-03  -1.734933   0.530468  2.060811  -0.515536
3   2000-01-04  -1.555121   1.452620  0.239859  -1.156896
4   2000-01-05   0.578117   0.511371  0.103552  -2.428202
5   2000-01-06   0.478344   0.449933 -0.741620  -1.962409
6   2000-01-07   1.235339  -0.091757 -1.543861  -1.084753
..         ...        ...        ...       ...        ...
993 2002-09-20 -10.628548  -9.153563 -7.883146  28.313940
994 2002-09-21 -10.390377  -8.727491 -6.399645  30.914107
995 2002-09-22  -8.985362  -8.485624 -4.669462  31.367740
996 2002-09-23  -9.558560  -8.781216 -4.499815  30.518439
997 2002-09-24  -9.902058  -9.340490 -4.386639  30.105593
998 2002-09-25 -10.216020  -9.480682 -3.933802  29.758560
999 2002-09-26 -11.856774 -10.671012 -3.216025  29.369368[1000 rows x 5 columns]

Numpy

DataFrame 转化成 numpy

df.to_numpy()
DataFrame.to_numpy() 的输出不包含行索引和列标签。

DataFrame.to_numpy() 输出底层数据的 NumPy 对象。注意,DataFrame 的列由多种数据类型组成时,该操作耗费系统资源较大,这也是 Pandas 和 NumPy 的本质区别:NumPy 数组只有一种数据类型,DataFrame 每列的数据类型各不相同。调用 DataFrame.to_numpy() 时,Pandas 查找支持 DataFrame 里所有数据类型的 NumPy 数据类型。还有一种数据类型是 object,可以把 DataFrame 列里的值强制转换为 Python 对象。

下面的 df 这个 DataFrame 里的值都是浮点数,DataFrame.to_numpy() 的操作会很快,而且不复制数据。

In [17]: df.to_numpy()
Out[17]:
array([[ 0.4691, -0.2829, -1.5091, -1.1356],[ 1.2121, -0.1732,  0.1192, -1.0442],[-0.8618, -2.1046, -0.4949,  1.0718],[ 0.7216, -0.7068, -1.0396,  0.2719],[-0.425 ,  0.567 ,  0.2762, -1.0874],[-0.6737,  0.1136, -1.4784,  0.525 ]])

df2 这个 DataFrame 包含了多种类型,DataFrame.to_numpy() 操作就会耗费较多资源。

In [18]: df2.to_numpy()
Out[18]:
array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'],[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']], dtype=object)

3、查看数据

显示索引:

In [15]: df.index
Out[15]:
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'],dtype='datetime64[ns]', freq='D')In [16]: df.columns
Out[16]: Index(['A', 'B', 'C', 'D'], dtype='object')

.head & .tail

head() 与 tail() 用于快速预览 Series 与 DataFrame,默认显示 5 条数据,也可以指定显示数据的数量。

In [13]: df.head()
Out[13]: A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401In [14]: df.tail(3)
Out[14]: A         B         C         D
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

.to_numpy()

DataFrame.to_numpy() 输出底层数据的 NumPy 对象。

注意,DataFrame 的列由多种数据类型组成时,该操作耗费系统资源较大,这也是 Pandas 和 NumPy 的本质区别:NumPy 数组只有一种数据类型,DataFrame 每列的数据类型各不相同。调用 DataFrame.to_numpy() 时,Pandas 查找支持 DataFrame 里所有数据类型的 NumPy 数据类型。还有一种数据类型是 object,可以把 DataFrame 列里的值强制转换为 Python 对象。

下面的 df 这个 DataFrame 里的值都是浮点数,DataFrame.to_numpy() 的操作会很快,而且不复制数据。

DataFrame.to_numpy() 的输出不包含 行索引和列标签。

In [17]: df.to_numpy()
Out[17]:
array([[ 0.4691, -0.2829, -1.5091, -1.1356],[ 1.2121, -0.1732,  0.1192, -1.0442],[-0.8618, -2.1046, -0.4949,  1.0718],[ 0.7216, -0.7068, -1.0396,  0.2719],[-0.425 ,  0.567 ,  0.2762, -1.0874],[-0.6737,  0.1136, -1.4784,  0.525 ]])In [18]: df2.to_numpy()
Out[18]:
array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'],[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']], dtype=object)

速查摘要:.describe()

describe() 可以快速查看数据的统计摘要:

In [19]: df.describe()
Out[19]: A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.073711 -0.431125 -0.687758 -0.233103
std    0.843157  0.922818  0.779887  0.973118
min   -0.861849 -2.104569 -1.509059 -1.135632
25%   -0.611510 -0.600794 -1.368714 -1.076610
50%    0.022070 -0.228039 -0.767252 -0.386188
75%    0.658444  0.041933 -0.034326  0.461706
max    1.212112  0.567020  0.276232  1.071804

4、增添数据

插入列数据 Insert()

Insert用于在DataFrame的指定位置中插入新的数据列。默认情况下新列是添加到末尾的,但可以更改位置参数,将新列添加到任何位置。

Dataframe.insert(loc, column, value, allow_duplicates=False)

参数作用:

  • loc: int型,表示插入位置在第几列;若在第一列插入数据,则 loc=0
  • column: 给插入的列取名,如 column=‘新的一列’
  • value:新列的值,数字、array、series等都可以
  • allow_duplicates: 是否允许列名重复,选择Ture表示允许新的列名与已存在的列名重复
#新列的值
new_col = np.random.randn(10)
#在第三列位置插入新列,从0开始计算
df.insert(2, 'new_col', new_col)
df

添加行数据 append()

df.append(other, ignore_index=False, verify_integrity=False, sort=None)

参数说明:

  • other:要追加的数据,可以是dataframe,series,字典,列表
  • ignore_index:两个表的index是否有实际含义,默认为False,若ignore_index=True,表根据列名对齐合并,生成新的index
  • verify_integrity:默认为False,若为True,创建具有重复项的索引时引发ValueError
  • sort:默认为False,若为True如果’ self ‘和’ other '的列没有对齐,则对列进行排序。
>>> res = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
>>> res = res.append([{'qty1':10.0}], ignore_index=True)
>>> print(res.head())lib  qty1  qty2
0  NaN  10.0   NaN

5、排序

转置数据:.T

In [20]: df.T
Out[20]: 2013-01-01  2013-01-02  2013-01-03  2013-01-04  2013-01-05  2013-01-06
A    0.469112    1.212112   -0.861849    0.721555   -0.424972   -0.673690
B   -0.282863   -0.173215   -2.104569   -0.706771    0.567020    0.113648
C   -1.509059    0.119209   -0.494929   -1.039575    0.276232   -1.478427
D   -1.135632   -1.044236    1.071804    0.271860   -1.087401    0.524988

按轴排序:.sort_index

In [21]: df.sort_index(axis=1, ascending=False)
Out[21]: D         C         B         A
2013-01-01 -1.135632 -1.509059 -0.282863  0.469112
2013-01-02 -1.044236  0.119209 -0.173215  1.212112
2013-01-03  1.071804 -0.494929 -2.104569 -0.861849
2013-01-04  0.271860 -1.039575 -0.706771  0.721555
2013-01-05 -1.087401  0.276232  0.567020 -0.424972
2013-01-06  0.524988 -1.478427  0.113648 -0.673690

按值排序:.sort_values

  • Series.sort_values() 方法用于按值对 Series 排序。
  • DataFrame.sort_values() 方法用于按行列的值对 DataFrame 排序。
  • DataFrame.sort_values() 的可选参数 by 用于指定按哪列排序,该参数的值可以是一列或多列数据。
In [22]: df.sort_values(by='B')
Out[22]: A         B         C         D
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-06 -0.673690  0.113648 -1.478427  0.524988
2013-01-05 -0.424972  0.567020  0.276232 -1.087401

搜索排序

Series 支持 searchsorted() 方法,这与numpy.ndarray.searchsorted() 的操作方式类似。

最大值与最小值

Series 支持 nsmallest() 与 nlargest() 方法,本方法返回 N 个最大或最小的值。对于数据量大的 Series 来说,该方法比先为整个 Series 排序,再调用 head(n) 这种方式的速度要快得多。

6、选择

选择、设置标准 Python / Numpy 的表达式已经非常直观,交互也很方便,但对于生产代码,我们还是推荐优化过的 Pandas 数据访问方法:.at、.iat、.loc 和 .iloc。

获取数据

选择单列,产生 Series,与 df.A 等效:

In [23]: df['A']
Out[23]:
2013-01-01    0.469112
2013-01-02    1.212112
2013-01-03   -0.861849
2013-01-04    0.721555
2013-01-05   -0.424972
2013-01-06   -0.673690
Freq: D, Name: A, dtype: float64

用 [ ] 切片行:

In [24]: df[0:3]
Out[24]: A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804In [25]: df['20130102':'20130104']
Out[25]: A         B         C         D
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860

按标签选择 .loc[ ]

用标签提取一行数据:

In [26]: df.loc[dates[0]]
Out[26]:
A    0.469112
B   -0.282863
C   -1.509059
D   -1.135632
Name: 2013-01-01 00:00:00, dtype: float64

用标签选择多列数据:

In [27]: df.loc[:, ['A', 'B']]
Out[27]: A         B
2013-01-01  0.469112 -0.282863
2013-01-02  1.212112 -0.173215
2013-01-03 -0.861849 -2.104569
2013-01-04  0.721555 -0.706771
2013-01-05 -0.424972  0.567020
2013-01-06 -0.673690  0.113648

用标签切片,包含行与列结束点:

In [28]: df.loc['20130102':'20130104', ['A', 'B']]
Out[28]: A         B
2013-01-02  1.212112 -0.173215
2013-01-03 -0.861849 -2.104569
2013-01-04  0.721555 -0.706771

返回对象降维:

In [29]: df.loc['20130102', ['A', 'B']]
Out[29]:
A    1.212112
B   -0.173215
Name: 2013-01-02 00:00:00, dtype: float64

提取标量值:

In [30]: df.loc[dates[0], 'A']
Out[30]: 0.46911229990718628

快速访问标量,与上述方法等效:

In [31]: df.at[dates[0], 'A']
Out[31]: 0.46911229990718628

按位置选择 .iloc[ ]

用整数位置选择:

In [32]: df.iloc[3]
Out[32]:
A    0.721555
B   -0.706771
C   -1.039575
D    0.271860
Name: 2013-01-04 00:00:00, dtype: float64

类似 NumPy / Python,用整数切片:

In [33]: df.iloc[3:5, 0:2]
Out[33]: A         B
2013-01-04  0.721555 -0.706771
2013-01-05 -0.424972  0.567020

类似 NumPy / Python,用整数列表按位置切片:

In [34]: df.iloc[[1, 2, 4], [0, 2]]
Out[34]: A         C
2013-01-02  1.212112  0.119209
2013-01-03 -0.861849 -0.494929
2013-01-05 -0.424972  0.276232

显式整行切片:

In [35]: df.iloc[1:3, :]
Out[35]: A         B         C         D
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804

显式整列切片:

In [36]: df.iloc[:, 1:3]
Out[36]: B         C
2013-01-01 -0.282863 -1.509059
2013-01-02 -0.173215  0.119209
2013-01-03 -2.104569 -0.494929
2013-01-04 -0.706771 -1.039575
2013-01-05  0.567020  0.276232
2013-01-06  0.113648 -1.478427

显式提取值:

In [37]: df.iloc[1, 1]
Out[37]: -0.17321464905330858

快速访问标量,与上述方法等效:

In [38]: df.iat[1, 1]
Out[38]: -0.17321464905330858

布尔索引

用单列的值选择数据:

In [39]: df[df.A > 0]
Out[39]: A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-04  0.721555 -0.706771 -1.039575  0.271860

选择 DataFrame 里满足条件的值:

In [40]: df[df > 0]
Out[40]: A         B         C         D
2013-01-01  0.469112       NaN       NaN       NaN
2013-01-02  1.212112       NaN  0.119209       NaN
2013-01-03       NaN       NaN       NaN  1.071804
2013-01-04  0.721555       NaN       NaN  0.271860
2013-01-05       NaN  0.567020  0.276232       NaN
2013-01-06       NaN  0.113648       NaN  0.524988

用 isin() 筛选:

In [41]: df2 = df.copy()In [42]: df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']In [43]: df2
Out[43]: A         B         C         D      E
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632    one
2013-01-02  1.212112 -0.173215  0.119209 -1.044236    one
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804    two
2013-01-04  0.721555 -0.706771 -1.039575  0.271860  three
2013-01-05 -0.424972  0.567020  0.276232 -1.087401   four
2013-01-06 -0.673690  0.113648 -1.478427  0.524988  threeIn [44]: df2[df2['E'].isin(['two', 'four'])]
Out[44]: A         B         C         D     E
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804   two
2013-01-05 -0.424972  0.567020  0.276232 -1.087401  four

过滤查询 query

Query是pandas的过滤查询函数,使用布尔表达式来查询DataFrame的列,就是说按照列的规则进行过滤操作。

pandas.DataFrame.query(self, expr, inplace = False, **kwargs)

参数作用:

  • expr:要评估的查询字符串;
  • inplace=False:查询是应该修改数据还是返回修改后的副本
  • kwargs:dict关键字参数

首先生成一段df:

values_1 = np.random.randint(10, size=10)
values_2 = np.random.randint(10, size=10)
years = np.arange(2010,2020)
groups = ['A','A','B','A','B','B','C','A','C','C']
df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2})print(df)group   year    value_1  value_2
0     A     2010        7        2
1     A     2011        2        0
2     B     2012        9        5
3     A     2013        7        0
4     B     2014        2        1
5     B     2015        1        6
6     C     2016        9        3
7     A     2017        4        7
8     C     2018        9        1
9     C     2019        4        6

过滤查询用起来比较简单,比如要查列value_1<value_2的行记录:

print( df.query('value_1 < value_2’) )group   year     value_1  value_2
0     A     2010        1        3
2     B     2012        2        5
5     B     2015        6        8
7     A     2017        2        9
8     C     2018        4        9
9     C     2019        5        7

查询列 year>=2016 的行记录:

df.query('year >= 2016 ')group   year    value_1  value_2
6     C     2016        5        8
7     A     2017        6        0
8     C     2018        6        0
9     C     2019        9        6

随机选取若干个行或列 .sample

Sample用于从DataFrame中随机选取若干个行或列。

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

参数作用:

  • n:要抽取的行数
  • frac:抽取行的比例 例如frac=0.8,就是抽取其中80%
  • replace:是否为有放回抽样, True:有放回抽样 False:未放回抽样
  • weights:字符索引或概率数组
  • random_state :随机数发生器种子
  • axis:选择抽取数据的行还是列 axis=0:抽取行 axis=1:抽取列

比如要从df中随机抽取5行:

sample1 = df.sample(n=5)
print(sample1)group  year  value_1  value_2
1     A  2011        5        2
0     A  2010        9        4
3     A  2013        1        1
9     C  2019        6        5
7     A  2017        8        7

对数据 shuffle

最简单的办法就是采用 Pandas 自带的 sample方法,参数 frac 为返回的比例,如果需要shuffle后的数据集的index还是正常的排序,可以在后面添加 .reset_index(drop=True)

df.sample(frac=1)
df.sample(frac=1).reset_index(drop=True)

或者使用 sklearn 中的 shuffle 也同样可以实现

from sklearn.utils import shuffledf = shuffle(df)

Pandas 数据挖掘 分析相关推荐

  1. 安利一个超好用的 Pandas 数据挖掘分析神器

    作者 |欣一 来源 |Python爱好者集中营 今天小编继续来给大家介绍一款用于做EDA(探索性数据分析)的利器,并且可以自动生成代码,帮助大家极大节省工作时间与提升工作效率的利器,叫做Bambool ...

  2. 【Python】安利一个超好用的Pandas数据挖掘分析神器

    今天小编继续来给大家介绍一款用于做EDA(探索性数据分析)的利器,并且可以自动生成代码,帮助大家极大节省工作时间与提升工作效率的利器,叫做Bamboolib. 大家可以将其理解为是Pandas的GUI ...

  3. 2000字精华总结,安利一个超好用的Pandas数据挖掘分析神器

    在继上一次给大家推荐了两个数据分析工具之后: 推荐2个十分好用的pandas数据探索分析神器! 今天小编继续来给大家介绍一款用于做EDA(探索性数据分析)的利器,并且可以自动生成代码,帮助大家极大节省 ...

  4. 安利一个超好用的Pandas数据挖掘分析神器

    在继上一次给大家推荐了两个数据分析工具之后: 推荐2个十分好用的pandas数据探索分析神器! 今天小编继续来给大家介绍一款用于做EDA(探索性数据分析)的利器,并且可以自动生成代码,帮助大家极大节省 ...

  5. 大数据技术人员工具包之—常见数据挖掘分析处理工具

    大数据技术人员工具包之-常见数据挖掘分析处理工具 2016年03月15日 大数据 数据科学融合了多门学科并且建立在这些学科的理论和技术之上,包括数学.概率模型.统计学.机器学习.数据仓库.可视化等.在 ...

  6. pandas案例分析

    pandas案例分析 1 需求 现在我们有一组从2006年到2016年1000部最流行的电影数据 数据来源:https://www.kaggle.com/damianpanek/sunday-eda/ ...

  7. pandas分组分析:GroupBy和pandas交叉分析:pivot_table/crosstab【学习记录】

    pandas分组分析 分组分析: 根据分组字段,将分析对象划分成不同的部分,以对比分析各组之间差异性的分析方法: 分组分析常用的统计指标是计数.求和.平均值等. grouby语法: groupby(b ...

  8. 网络舆情数据挖掘分析的三点方法和建议

    ​互联网时代,信息数据海量化,要想从浩瀚的网络舆情数据中挖掘出极具价值的信息是个难题.那么,到底舆情数据挖掘分析怎么做?怎样对网络舆情数据进行挖掘分析? 网络舆情数据挖掘分析的三点方法和建议: 1.从 ...

  9. 数据挖掘分析考试笔记

    数据挖掘分析考试笔记 文章目录 数据挖掘分析考试笔记 英译汉 第一章 绪论 第二章 知识发现过程与应用结构 第三章 关联规则挖掘 Apriori算法 close算法 FP-tree 第四章 分类 分类 ...

最新文章

  1. python可以干什么工作-Python学完工作不好找?看看数据分析可视化都可以做什么...
  2. Nginx详解五:Nginx基础篇之HTTP请求
  3. coredump 断点_coredump调试的使用
  4. 历史上的今天:编程语言中null引用的十亿美元错误
  5. js jQuery取消添加超链接的方法小结
  6. win10电脑黑屏只有鼠标箭头_电脑黑屏后屏幕只有鼠标怎么办呢?
  7. linux python源码目录结构,TensorFlow0.8源码阅读 -- 代码目录结构讲解
  8. bzoj1038500AC!
  9. 基于Solana区块链的去中心化交易所Orca正式启动
  10. ASP.NET MVC中加载WebForms用户控件(.ascx)
  11. 一个时代的落幕!继苹果、火狐、Linux Lite之后,微软也放弃Flash
  12. 对M/M/N排队论模型的matlab代码实现
  13. SCAU高级语言程序设计--实验6 循环结构(二)(3)
  14. 浏览器的语音识别功能
  15. Datawhale Pandas Task08 文本数据
  16. Egret eui.TextInput组件输入后未清掉焦点,微信浏览器切换后台再切回,点击会一直唤醒输入法的Bug
  17. Perl脚本执行方法小结
  18. 工程技术TOP期刊《Engineering》观点评述:基于脑电图的脑-机接口系统在实用化进程中面临的挑战...
  19. sim300的一些知识点
  20. QSL之创建与管理表

热门文章

  1. CVPR 2018 | 8篇论文、10+Demo、双项挑战赛冠军,旷视科技掀起CVPR产学研交流热潮
  2. 2014中国计量学院matlab考试卷,中国计量学院学习心得
  3. 计算机英语造句简单的,简短的英语情话句子 经典英文简短情话
  4. html代码自动排列,html页面如何实行数据排序?(附代码)
  5. C++压缩解压开源库ZIP
  6. 西安电子科技大学和东北大学计算机,东北大学分数线比西安电子科技大学低,为什么高校排名靠前?...
  7. 推荐几个不错的DOTNET控件网址
  8. hdu 5435 A serious math problem 数位dp
  9. 老铁们,Arxiv每日论文服务美美上线啦
  10. 卷积神经网络(CNN)相关知识以及数学推导