stanford-oval/wikipedia huggingface dataset:
Pandas
主要特征

pandas提供了快速而高效的数据帧对象，用于凭借其集成的索引进行数据操纵。它的主要特征有：
易于将在其他的Python和NumPy数据结构中，参差不齐或不同索引的数据，转换成数据帧对象。
大小可变性，可以在数据帧和更高维对象中插入或删除纵列。
自动和显式的“数据对齐”，标签和数据之间的联系是固有的，但是可以显式的控制二元运算的匹配和广播行为。两个序列对象按标签自动对齐，两个数据帧对象自动对齐于纵列标签和索引（即横行标签）二者上，二元运算的结果对象具有双方的纵列标签和横行标签的并集；数据帧与序列对象之间的默认行为，是序列的索引自动对齐于数据帧的纵列标签，从而纵向逐横行广播。
易于处理缺失数据，它被表示为用于浮点数的NaN（即NumPy的nan）、用于日期时间的NaT或跨数据类型的NA。
智能的对大数据集的基于标签的分片（英语：），多重索引和其他花样索引，依据布尔值向量的子集化（英语：）。
直观的数据集的归并和连接。
强大而灵活的分组（英语：）（groupby）功能，用来在数据集上进行分离-应用-合并（split-apply-combine）运算，它可用于数据聚合（英语：）和变换（英语：）二者。
灵活的数据集的重制形状（reshape）和枢轴汇总。
轴可以有层级标签，从而在绘图时每个刻度可能有多重标签。
健壮的I/O工具，用于从CSV文件和其他平面文件、JSON文件、Parquet（英语：）文件、Arrow的Feather文件、SQL表和查询、Excel文件装载数据，并以极快的HDF5格式保存/装载数据。
特定于时间序列的功能，例如日期范围生成和频率转换，移动窗口统计，日期移位（英语：）和滞后（英语：）。
pandas经过了高度的性能优化，关键代码路径用Cython或C语言写成。pandas可以利用PyArrow来扩展功能并增进各种API的性能。pandas的缺省绘图后端是matplotlib，还可以扩展上其他第三方绘图（英语：）后端，比如Plotly Express。
进程内（英语：）SQL OLAP列式数据库DuckDB，可以在pandas数据帧上执行SQL。
示例 > 基本运算

在下面的梗概示例中，展示针对数据帧的纵列和横行的基本运算：
>>> import pandas as pd
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> 
>>> data = {
...     'place': ['A']*3 + ['B']*3 + ['C']*3 + ['D']*3,
...     'date': pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03'] * 4),
...     'value': [x + 0.1 for x in range(12)]
... }
>>> 
>>> df = pd.DataFrame(data)
>>> type(df['value']) == pd.Series
True
>>>
>>> df['value1'] = df['value'] + 0.1
>>> df
   place       date  value  value1
0      A 2023-01-01    0.1     0.2
1      A 2023-01-02    1.1     1.2
2      A 2023-01-03    2.1     2.2
3      B 2023-01-01    3.1     3.2
4      B 2023-01-02    4.1     4.2
5      B 2023-01-03    5.1     5.2
6      C 2023-01-01    6.1     6.2
7      C 2023-01-02    7.1     7.2
8      C 2023-01-03    8.1     8.2
9      D 2023-01-01    9.1     9.2
10     D 2023-01-02   10.1    10.2
11     D 2023-01-03   11.1    11.2
>>> 
>>> df.index
RangeIndex(start=0, stop=12, step=1)
>>> 
>>> df.columns
Index(['place', 'date', 'value', 'value1'], dtype='object')
>>> 
>>> df.loc[[1, 2], ['value', 'value1']] 
   value  value1
1    1.1     1.2
2    2.1     2.2
>>> 
>>> df.at[1, 'value']
np.float64(1.1)
>>> 
>>> df['value'].loc[1]
np.float64(1.1)
>>> 
>>> df[['value','value1']].to_numpy().mean().round(2)
np.float64(5.65)
>>> df[['value','value1']].to_numpy().mean(axis=0)
array([5.6, 5.7])
>>> df[['value','value1']].to_numpy().mean(axis=1)
array([ 0.15,  1.15,  2.15,  3.15,  4.15,  5.15,  6.15,  7.15,  8.15,
        9.15, 10.15, 11.15])
>>> 
>>> df[(df['value']/2 > 1) & (df['value1'] < 3)]
  place       date  value  value1
2     A 2023-01-03    2.1     2.2
>>> 
>>> df.query('value/2 > 1 & value1 < 3')
  place       date  value  value1
2     A 2023-01-03    2.1     2.2
>>>
示例 > 数据帧格式

数据帧中的数据经常存储为两种格式：堆叠格式或记录格式。在堆栈格式中，针对每个主题（subject）在适用情况下有多个横行，故而也称为“长”格式。在记录格式中，针对每个主题典型地有一个横行，故而也称为“宽”格式。在这个例子中，如果要对纵列'place'标识出的每个唯一的变量（'A', 'B', 'C', 'D'）进行时间序列运算，更好的表示形式为：诸纵列都对应唯一的变量（即对应不同的观测地点或观测者），而日期索引（'date'）标识出每个（不可细分的）个体观测。为此使用pivot()，将数据帧从堆叠格式重制形状为记录格式：
>>> df.drop([0, 4, 8]).pivot(index='date', columns='place')
           value                 value1                
place          A    B    C     D      A    B    C     D
date                                                   
2023-01-01   NaN  3.1  6.1   9.1    NaN  3.2  6.2   9.2
2023-01-02   1.1  NaN  7.1  10.1    1.2  NaN  7.2  10.2
2023-01-03   2.1  5.1  NaN  11.1    2.2  5.2  NaN  11.2
>>>
这里给pivot()的输入数据帧的诸纵列中，除了指定用作index和columns的纵列（'date'和'place'），仍有多个值纵列（'value', 'value1'）；这里没有通过指定values参数来选取其中之一，故而结果数据帧的诸纵列被纳入层级式索引（即多重索引MultiIndex），其最顶层指示出各自的值纵列（即依据观测量的不同而进行顶层分组）。
示例 > 串接运算

使用concat()对数据帧进行串接（英语：）运算：
>>> df1 = df.drop(columns='value').rename(columns={'value1': 'value'})
>>> df1 = pd.concat([df.drop(columns='value1'), df1], ignore_index=True)
>>> df1.shape
(24, 3)
>>> 
>>> data1 = [
...     ('A', pd.to_datetime('2023-01-01'), 0.3),
...     ('A', pd.to_datetime('2023-01-02'), 1.3)
... ]
>>> 
>>> rows = pd.DataFrame(data1, columns=['place', 'date', 'value'])
>>> pd.concat([df1, rows], ignore_index=True).tail(3)
   place       date  value
23     D 2023-01-03   11.2
24     A 2023-01-01    0.3
25     A 2023-01-02    1.3
>>> 
>>> df_A = df1[df1['place']=='A'].drop(columns='place')
>>> df_A
         date  value
0  2023-01-01    0.1
1  2023-01-02    1.1
2  2023-01-03    2.1
12 2023-01-01    0.2
13 2023-01-02    1.2
14 2023-01-03    2.2
>>> 
>>> df_B = df1[df1['place']=='B'].drop(columns='place')
>>> df_C = df1[df1['place']=='C'].drop(columns='place')
>>> df_D = df1[df1['place']=='D'].drop(columns='place')
>>> df1 = pd.concat([df_A, df_B, df_C, df_D], keys=['A', 'B', 'C', 'D']) \
...     .droplevel(1).rename_axis('place').reset_index()
>>>
示例 > 分组聚合运算

使用groupby()和紧随的agg()，对数据帧进行分组（英语：）并聚合（英语：）运算：
>>> df2 = df1.groupby(['date', 'place']).agg({'value': 'sum'})
>>> df2
                  value
date       place       
2023-01-01 A        0.3
           B        6.3
           C       12.3
           D       18.3
2023-01-02 A        2.3
           B        8.3
           C       14.3
           D       20.3
2023-01-03 A        4.3
           B       10.3
           C       16.3
           D       22.3
>>> 
>>> df2.reorder_levels(['place', 'date']).sort_index()
                  value
place date             
A     2023-01-01    0.3
      2023-01-02    2.3
      2023-01-03    4.3
B     2023-01-01    6.3
      2023-01-02    8.3
      2023-01-03   10.3
C     2023-01-01   12.3
      2023-01-02   14.3
      2023-01-03   16.3
D     2023-01-01   18.3
      2023-01-02   20.3
      2023-01-03   22.3
>>> 
>>> df2.shape
(12, 1)
>>> 
>>> df2.index
MultiIndex([('2023-01-01', 'A'),
            ('2023-01-01', 'B'),
            ('2023-01-01', 'C'),
            ('2023-01-01', 'D'),
            ('2023-01-02', 'A'),
            ('2023-01-02', 'B'),
            ('2023-01-02', 'C'),
            ('2023-01-02', 'D'),
            ('2023-01-03', 'A'),
            ('2023-01-03', 'B'),
            ('2023-01-03', 'C'),
            ('2023-01-03', 'D')],
           names=['date', 'place'])
>>> 
>>> df2.columns
Index(['value'], dtype='object')
>>> 
>>> df2.loc[('2023-01-02', 'A')]
value    2.3
Name: (2023-01-02 00:00:00, A), dtype: float64
>>> 
>>> df2.loc['2023-01-02']
       value
place       
A        2.3
B        8.3
C       14.3
D       20.3
>>> 
>>> df2.xs('A', level='place')
            value
date             
2023-01-01    0.3
2023-01-02    2.3
2023-01-03    4.3
>>>
示例 > 枢轴聚合运算

使用pivot_table()，对数据帧进行枢轴聚合运算：
>>> df3 = df1.pivot_table(index='date', columns='place', aggfunc='sum')
>>> df3
           value                  
place          A     B     C     D
date                              
2023-01-01   0.3   6.3  12.3  18.3
2023-01-02   2.3   8.3  14.3  20.3
2023-01-03   4.3  10.3  16.3  22.3
>>> 
>>> df3.shape
(3, 4)
>>> 
>>> df3.to_numpy()
array([[ 0.3,  6.3, 12.3, 18.3],
       [ 2.3,  8.3, 14.3, 20.3],
       [ 4.3, 10.3, 16.3, 22.3]])
>>> 
>>> df3.index
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'], dtype='datetime64[ns]', name='date', freq=None)
>>> 
>>> df3.columns
MultiIndex([('value', 'A'),
            ('value', 'B'),
            ('value', 'C'),
            ('value', 'D')],
           names=[None, 'place'])
>>> 
>>> df1.pivot_table(index='date', columns='place', values='value', aggfunc='sum').columns
Index(['A', 'B', 'C', 'D'], dtype='object', name='place')
>>> 
>>> df3['value'].columns
Index(['A', 'B', 'C', 'D'], dtype='object', name='place')
>>> 
>>> df3[('value', 'A')]
date
2023-01-01    0.3
2023-01-02    2.3
2023-01-03    4.3
Name: (value, A), dtype: float64
>>> 
>>> df3.stack().shape
(12, 1)
>>> df2.unstack().shape
(3, 4)
>>>
示例 > 归并运算

使用merge()，对数据帧进行归并运算：
>>> sr_A = df3[('value', 'A')]
>>> sr_B = df3[('value', 'B')]
>>> sr_C = df3[('value', 'C')]
>>> sr_D = df3[('value', 'D')]
>>> merge_date = lambda x, y: pd.merge(x, y, on='date')
>>> df3 = merge_date(merge_date(sr_A, sr_B), merge_date(sr_C, sr_D)) \
...     .rename_axis([None, 'place'], axis=1)
>>> 
>>> pd.merge(df_A, df_B.drop('2023-01-02'), on='date')
           value      
               A     B
date                  
2023-01-01   0.3   6.3
2023-01-03   4.3  10.3
>>> 
>>> pd.merge(df_A, df_B.drop('2023-01-02'), on='date', how='left')
           value      
               A     B
date                  
2023-01-01   0.3   6.3
2023-01-02   2.3   NaN
2023-01-03   4.3  10.3
>>>
示例 > 绘图输出

用matplotlib为数据帧绘制条形图：
>>> df_axis0, df_axis1 = df3.shape
>>> df_columns = df3.to_dict(orient='list')
>>> df_index = df3.index.to_list()
>>> x = np.arange(df_axis0)
>>> width = 1/(df_axis1 + 1)
>>> mult = 0
>>> 
>>> fig, ax = plt.subplots(layout='constrained')
>>> for name, value in df_columns.items():
...     offset = width * mult
...     rects = ax.bar(x + offset, value, width, label=name[1])
...     ax.bar_label(rects, padding=3)
...     mult += 1
... 
[Text(0, 3, '0.3'), Text(0, 3, '2.3'), Text(0, 3, '4.3')]
[Text(0, 3, '6.3'), Text(0, 3, '8.3'), Text(0, 3, '10.3')]
[Text(0, 3, '12.3'), Text(0, 3, '14.3'), Text(0, 3, '16.3')]
[Text(0, 3, '18.3'), Text(0, 3, '20.3'), Text(0, 3, '22.3')]
>>> ax.set_xticks(x + width*(df_axis1 - 1)/2,
...     [x.strftime('%Y-%m-%d') for x in df_index])
[<matplotlib.axis.XTick object at 0x7bb6925408f0>, <matplotlib.axis.XTick object at 0x7bb692541700>, <matplotlib.axis.XTick object at 0x7bb6925421e0>]
>>> ax.legend()
<matplotlib.legend.Legend object at 0x7bb696123aa0>
>>> ax.grid(axis='y', linestyle=':')
>>> ax.set_axisbelow(True)
>>> plt.show()
>>>
示例 > CSV文件操作

导出和导入CSV文件：
>>> df2.to_csv('dftest.csv', float_format='%.1f')
>>> 
>>> df4 = pd.read_csv('dftest.csv', index_col=[0,1])
>>> df4.shape
(12, 1)
在不指定header参数即采用其缺省值之时，从导入文件标头即第一横行推导出数据的纵列名字。在导入文件时采用index_col参数，指定用作索引即横行标签的纵列。在标头的纵列数大于数据记录的纵列数之时，标头末位多出的纵列被设置为NaN；在标头的纵列数小于数据记录的纵列数之时，数据记录首位多出的纵列被用作索引；在标头的纵列数等于数据记录的纵列数，并且未指定索引列之时，则自动增加默认的没有名字的范围索引作为索引；在标头的纵列数等于数据记录的纵列数，并且已指定索引列之时，采用指定纵列作为索引。
在导入文件时可以通过usecols参数指定选用的纵列子集。如果所导入的文件没有标头，则需要指定header=None，还可以使用names参数，为导入数据指定纵列名字。如果所导入的文件有标头，并且要使用names参数指定替代它的纵列名字，则需要同时指定header=0。在导出文件时索引总是被导出的，可以使用index_label参数，为没有名字的索引纵列补充指定其名字。在导入pandas所导出的文件之时，需要指定索引列来避免再次自动增加缺省索引。
当数据帧是记录格式，故而columns方向采用了多重索引之时，所导出的CSV文件的标头有多个横行，以这里的数据帧df3为例，在导入它之时需要指定header=[0, 1]和index_col=0，但不能同时使用usecols或names参数：
>>> df3.to_csv('dftest.csv', float_format='%.1f')
>>> 
>>> df4 = pd.read_csv('dftest.csv', header=[0, 1], index_col=0)
>>> df4.shape
(3, 4)
使用util-linux工具组成员column来查看导出的CSV文件：
$ cat dftest.csv | column -s, -o, -t 
          ,value,value,value,value
place     ,A    ,B    ,C    ,D
date      ,     ,     ,     ,
2023-01-01,0.3  ,6.3  ,12.3 ,18.3
2023-01-02,2.3  ,8.3  ,14.3 ,20.3
2023-01-03,4.3  ,10.3 ,16.3 ,22.3
这里的前两横行的除了第一纵列之外的纵列，指定多层索引的纵列名字为[('value', 'A'), ('value', 'B'), ('value', 'C'), ('value', 'D')]。第一纵列的前两单元，指定了诸纵列columns的多重索引自身的名字列表为[None, 'place']，而第一纵列的第三单元，指定了索引index的日期时间索引自身的名字为'date'。
示例 > JSON文件操作

导出和导入JSON文件：
>>> df3.to_json('dftest.json', orient='index', date_format='iso', date_unit='s')
>>> 
>>> df4 = pd.read_json('dftest.json', orient='index')
>>> df4.shape
(3, 4)
>>> 
>>> df4.columns
Index(['('value', 'A')', '('value', 'B')', '('value', 'C')', '('value', 'D')'], dtype='object')
>>> 
>>> df4.columns = pd.MultiIndex.from_tuples([eval(x) for x in df4.columns])
>>> df4.columns.names = [None, 'place']
>>> df4.index.name = 'date'
这里指定了orient（方向）为'index'（索引），即采用横行为主（英语：）次序；这里指定了日期时间格式为ISO 8601标准格式，并且时间单位为秒。JSON对象的键只能是字符串，在导出为JSON文件之时，元组被转换成字符串；而在导入它之时，需要通过eval()将其再转换为元组。
使用jq语言实现jq来查看导出的JSON文件：
$ cat dftest.json | jq
{
  "2023-01-01T00:00:00": {
    "('value', 'A')": 0.3,
    "('value', 'B')": 6.3,
    "('value', 'C')": 12.3,
    "('value', 'D')": 18.3
  },
  "2023-01-02T00:00:00": {
    "('value', 'A')": 2.3,
    "('value', 'B')": 8.3,
    "('value', 'C')": 14.3,
    "('value', 'D')": 20.3
  },
  "2023-01-03T00:00:00": {
    "('value', 'A')": 4.3,
    "('value', 'B')": 10.3,
    "('value', 'C')": 16.3,
    "('value', 'D')": 22.3
  }
}
在导出的数据中，不包含诸纵列columns的多重索引自身的名字列表即[None, 'place']，不包含索引index自身的名字即'date'。
示例 > HDF5文件操作

导出和导入HDF5文件基于了PyTables：
>>> df3.to_hdf('dftest.h5', key='df3', mode='w')
>>> df.to_hdf('dftest.h5', key='df', mode='a')
>>> 
>>> df4 = pd.read_hdf('dftest.h5', key='df3')
>>> df4.shape
(3, 4)
这里通过键（key）参数，指定了与数据帧相对应的在HDF5文件中的群组（Group），对它采用了缺省的'fixed'（固定）存储格式。文件打开模态'w'是为“写”（write）即“新建”，而打开模态'a'是为“附加”（append）。
使用hdf5-tools工具组成员h5ls来查看导出的HDF5文件：
$ h5ls dftest.h5
df                       Group
df3                      Group
$ h5ls -r -d dftest.h5/df3
/axis0_label0            Dataset {4}
    Data:
         0, 0, 0, 0
/axis0_label1            Dataset {4}
    Data:
         0, 1, 2, 3
/axis0_level0            Dataset {1}
    Data:
         "value"
/axis0_level1            Dataset {4}
    Data:
         "A", "B", "C", "D"
/axis1                   Dataset {3}
    Data:
         1672531200000000000, 1672617600000000000, 1672704000000000000
/block0_items_label0     Dataset {4}
    Data:
         0, 0, 0, 0
/block0_items_label1     Dataset {4}
    Data:
         0, 1, 2, 3
/block0_items_level0     Dataset {1}
    Data:
         "value"
/block0_items_level1     Dataset {4}
    Data:
         "A", "B", "C", "D"
/block0_values           Dataset {3, 4}
    Data:
         0.3, 6.3, 12.3, 18.3, 2.3, 8.3, 14.3, 20.3, 4.3, 10.3, 16.3, 22.3
这里的HDF5文件中的日期时间表示，是以纳秒为单位的UNIX时间纪元（英语：）时间戳。这种存储格式保存了数据帧的两个轴和所有的块，它采用的轴编号0和1与编程API所用的NumPy轴编号相反。这里的df3存储只有一个块，这个块的items的内容同于axis0。下面查看df存储的情况，它的四个纵列被整合（consolidate）为三个块，其items的并集同于axis0:
$ h5ls -r dftest.h5/df
/axis0                   Dataset {4}
/axis1                   Dataset {12}
/block0_items            Dataset {1}
/block0_values           Dataset {12, 1}
/block1_items            Dataset {2}
/block1_values           Dataset {12, 2}
/block2_items            Dataset {1}
/block2_values           Dataset {1/Inf}
保存HDF5文件还可采用'table'（表格）格式，HDF5文件中这种存储格式的群组，可以直接在其上进行查询和过滤：
>>> df3.to_hdf('dftest.h5', key='df3t', format='table', mode='a')
>>> 
>>> pd.read_hdf('dftest.h5', key='df3t', where='index > 20230101', columns=[('value', 'A'), ('value', 'C')])
           value      
place          A     C
date                  
2023-01-02   2.3  14.3
2023-01-03   4.3  16.3
查看HDF5文件中的这种存储格式：
$ h5ls dftest.h5/df3t
_i_table                 Group
table                    Dataset {3/Inf}
$ h5ls -r -d dftest.h5/df3t/table
df4/table                Dataset {3/Inf}
    Data:
         {1672531200000000000, [0.3,6.3,12.3,18.3]},
         {1672617600000000000, [2.3,8.3,14.3,20.3]},
         {1672704000000000000, [4.3,10.3,16.3,22.3]}
这里的_i_table/index群组存储了PyTables的tables.index模块所存取的诸多内容。
示例 > netCDF文件操作

导出和导入netCDF文件可以借助xarray，它依赖于pandas，它通过netcdf4-python支持导入导出netCDF-4格式数据，通过SciPy支持其他版本netCDF格式。xarray能够在自身的数据阵列（DataArray）与pandas的序列之间，在自身的数据集（Dataset）与pandas的数据帧之间，进行相互转换：
>>> import xarray as xr
>>> 
>>> df2.to_xarray()
<xarray.Dataset> Size: 152B
Dimensions:  (date: 3, place: 4)
Coordinates:
  * date     (date) datetime64[ns] 24B 2023-01-01 2023-01-02 2023-01-03
  * place    (place) object 32B 'A' 'B' 'C' 'D'
Data variables:
    value    (date, place) float64 96B 0.3 6.3 12.3 18.3 ... 4.3 10.3 16.3 22.3
>>> 
>>> df3.to_xarray()
<xarray.Dataset> Size: 120B
Dimensions:         (date: 3)
Coordinates:
  * date            (date) datetime64[ns] 24B 2023-01-01 2023-01-02 2023-01-03
Data variables:
    ('value', 'A')  (date) float64 24B 0.3 2.3 4.3
    ('value', 'B')  (date) float64 24B 6.3 8.3 10.3
    ('value', 'C')  (date) float64 24B 12.3 14.3 16.3
    ('value', 'D')  (date) float64 24B 18.3 20.3 22.3
>>> 
>>> df2.to_xarray().to_netcdf('dftest.nc')
>>> 
>>> df4 = xr.open_dataset('dftest.nc').to_dataframe()
>>> df4.shape
(12, 1)
这里的从堆叠格式的数据帧df2转换出来的数据集可以导出至netCDF文件，而从记录格式的数据帧df3转换出来的数据集因变量名字而不能直接导出至netCDF文件。
使用netcdf-bin工具组成员ncdump来查看导出的netCDF文件：
$ ncdump dftest.nc
netcdf dftest {
dimensions:
	date = 3 ;
	place = 4 ;
variables:
	double value(date, place) ;
		value:_FillValue = NaN ;
	int64 date(date) ;
		date:units = "days since 2023-01-01 00:00:00" ;
		date:calendar = "proleptic_gregorian" ;
	string place(place) ;
data:

 value =
  0.3, 6.3, 12.3, 18.3,
  2.3, 8.3, 14.3, 20.3,
  4.3, 10.3, 16.3, 22.3 ;

 date = 0, 1, 2 ;

 place = "A", "B", "C", "D" ;
}
$ ncdump -k dftest.nc
netCDF-4
$ h5ls -r -d dftest.nc
/                        Group
/date                    Dataset {3}
    Data:
         0, 1, 2
/place                   Dataset {4}
    Data:
         "A", "B", "C", "D"
/value                   Dataset {3, 4}
    Data:
         0.3, 6.3, 12.3, 18.3, 2.3, 8.3, 14.3, 20.3, 4.3, 10.3, 16.3, 22.3
这里的日期时间表示遵循了气候和预报元数据约定（英语：），采用的时间单位为距离某个指定的开始日期时间的日数，历法为前推格里高利历。ncdump的输出所称谓的变量，代表相同类型的值的多维阵列。这里有三个变量：value是数据变量，date和place是坐标变量。变量声明指定了变量的数据类型、名字和以维度名字列表描述的形状，例如double value(date, place)，维度名字可以是x, y, z, t等等，而这里的维度名字同于对应的坐标变量名字。
示例 > SQL关系数据库操作

下面通过SQLAlchemy将数据帧导出和导入于SQL关系数据库SQLite：
>>> from sqlalchemy import create_engine
>>> engine = create_engine("sqlite:///dftest.db")
>>> 
>>> df2.to_sql(name='df2', con=engine)
12
>>> 
>>> with engine.connect() as conn:
...     df4 = pd.read_sql('SELECT * FROM df2', conn)
... 
>>> 
>>> df4.shape
(12, 3)
>>> df4['date'] = pd.to_datetime(df4['date'])
>>> df4 = df4.set_index(['date', 'place'])
>>> df4.shape
(12, 1)
使用SQLite的命令行界面来查看导出的数据库文件：
$ echo '.tables' | sqlite3 dftest.db
df2
$ echo '.schema df2' | sqlite3 dftest.db
CREATE TABLE df2 (
	date DATETIME, 
	place TEXT, 
	value FLOAT
);
CREATE INDEX ix_df2_date ON df2 (date);
CREATE INDEX ix_df2_place ON df2 (place);
$ echo 'SELECT * FROM df2' | sqlite3 dftest.db
2023-01-01 00:00:00.000000|A|0.3
2023-01-01 00:00:00.000000|B|6.3
2023-01-01 00:00:00.000000|C|12.3
2023-01-01 00:00:00.000000|D|18.3
2023-01-02 00:00:00.000000|A|2.3
2023-01-02 00:00:00.000000|B|8.3
2023-01-02 00:00:00.000000|C|14.3
2023-01-02 00:00:00.000000|D|20.3
2023-01-03 00:00:00.000000|A|4.3
2023-01-03 00:00:00.000000|B|10.3
2023-01-03 00:00:00.000000|C|16.3
2023-01-03 00:00:00.000000|D|22.3
SQLite将SQL的数据类型DATETIME硬性指定为亲和NUMERIC，而NUMERIC可以按其适合情况转换为五个存储类别（NULL、INTEGER、REAL、TEXT或BLOB）之一，这里的数据帧df2的date纵列中的数据，被转换成为INTEGER、REAL和TEXT三者中的TEXT即文本字符串。
引用

↑  . 2024年9月20日  [2024年9月22日].
↑  . pandas. 28 January 2020  [30 January 2020]. （原始内容存档于2012-02-14）.
↑  Wes McKinney.  (PDF). 2011  [2 August 2018]. （原始内容 (PDF)存档于2015-05-13）.
↑  McKinney, Wes. . O'Reilly Media. 2017: 13. ISBN 9781491957660.
↑  .   [2023-09-30]. （原始内容存档于2023-10-10）.
↑  .   [2023-10-06]. （原始内容存档于2023-11-07）.
↑  .   [2022-09-01]. （原始内容存档于2022-09-01）.
↑  .   [2020-09-12]. （原始内容存档于2020-09-15）.
↑  .   [2020-09-12]. （原始内容存档于2020-09-15）.
↑  .   [2020-09-12]. （原始内容存档于2020-09-15）.
↑  .   [2023-12-22]. （原始内容存档于2024-04-21）.
↑  .   [2023-12-22]. （原始内容存档于2022-09-01）.
↑  .   [2023-12-22]. （原始内容存档于2024-05-16）.
↑  .   [2020-09-12]. （原始内容存档于2020-09-15）.
↑  McKinney, Wes. . wesmckinney.com. 21 September 2017  [21 December 2023]. （原始内容存档于2024-05-25） （英语）.
↑  .   [2023-09-28]. （原始内容存档于2023-09-28）.
↑  .   [2024-09-24]. （原始内容存档于2025-01-28）.
↑  .   [2023-09-29]. （原始内容存档于2023-10-03）.
↑  .   [2023-09-28]. （原始内容存档于2023-08-24）.
↑  .   [2023-12-25]. （原始内容存档于2023-12-25）.
↑  .
↑  .   [2023-12-25]. （原始内容存档于2023-12-25）.
↑  .   [2023-10-07]. （原始内容存档于2023-10-12）.
↑  .   [2022-09-04]. （原始内容存档于2022-09-04）.
↑  .   [2023-10-09]. （原始内容存档于2023-10-12）. 
.   [2023-10-09]. （原始内容存档于2023-10-12）.
例子代码生成的条形图。
12月14日

12月14日是公曆一年中的第348天 ( 閏年第349天 )，離全年結束還有17天。
大事记 > 19世紀以前

835年：不滿宦官專權的唐文宗聯合李訓和鄭注欲加以剷除，但反而造成數百名官員遭到殺害。
1120年：北宋方腊起义。
1287年：尼德蘭與日耳曼北部沿岸發生嚴重風暴潮，造成約5萬至8萬人死亡，並形成今日的須德海。
1408年：中国最早最大的百科全书“永乐大典”历时5年编纂完成。
1542年：在詹姆斯五世逝世後，才剛出生6天的女兒瑪麗一世繼任成為蘇格蘭斯圖亞特王朝女王。
1789年：法國大革命時期為了统一法國的行政劃分而創建省、區和市鎮。
大事记 > 19世紀

1819年：亚拉巴马州成为美國第22州。
1825年：俄国發生十二月党人起义。
1836年：托萊多戰爭是俄亥俄州和密歇根州領土之間的一場大多不流血的領土糾紛，由備受爭議的「霜咬會議」通過的一項決議非官方地結束。
1896年：苏格兰格拉斯哥地铁正式启用，成为世界上第三个启用的地铁系统。
1900年：德國物理學家馬克斯·普朗克提出普朗克黑體輻射定律，認為能量將以量子散發電磁輻射。
大事记 > 20世紀

1902年：海底电缆第一次铺过太平洋，从旧金山铺到檀香山。
1905年：伊朗爆发革命，巴列维王朝上台。
1911年：挪威探險家羅爾德·亞孟森所率領的南極探險隊成為第一批到達南極點的人類。
1912年：中華民國政府准允男子自由纳妾。
1913年：金剛級第四艘也是最後一艘日本戰鬥巡洋艦榛名號戰艦下水，之後參與了兩次世界大戰的服役。
1918年：芬兰议会推选的国王韦伊诺一世由于德国在第一次世界大战中战败而放弃王位。
1920年：爱尔兰被一分为二，北爱尔兰留在英国。
1927年：英国承认伊拉克独立。
1927年：廣州暴動：中華民國政府与苏联断交。
1939年：冬季战争：苏联被驱逐出國際聯盟。
1941年：二战：珍珠港事件：大日本帝國和泰國缔结军事同盟，克羅地亞独立國对美國宣戰。
1946年：联合国大会决定设立联合国总部于纽约市。
1947年：纳斯卡赛车（NASCAR）开始。
1949年：保加利亚叛国案首犯科斯托夫处死刑。
1958年：在第三次苏联南极远征，苏联探险队在人类历史中首次到达南极洲難抵極。
1960年：联合国大会通过关于给殖民地独立的宣言《給殖民國家和人民獨立宣言》，簡稱《反殖民宣言》。
1962年：水手2号抵达金星。
1984年：中国足球队首次进入亚洲杯足球赛决赛。
1994年：全國人民代表大會通過後中華人民共和國國務院中华人民共和国国务院总理李鹏在湖北宜昌长江三峡建設工地宣布長江三峽水利樞紐工程正式开工。
1995年：波士尼亞與赫塞哥維納、克羅埃西亞與塞爾維亞三方於巴黎簽署和平協定，從而結束波士尼亞戰爭。
大事记 > 21世紀

2012年：康涅狄格州紐敦鎮一所小學發生嚴重槍擊事件。據當地警方宣布，目前至少造成28人死亡，其中20名是兒童。
2013年：苏丹人民解放军一支部队发动政变，引发一场旷日持久的内战。
2018年：葡萄牙里斯本一架電車出軌翻側，造成至少28人受傷。
2020年：韩国国会通过《韩朝关系发展法》修正案，将向朝鲜放飞气球的活动定为刑事罪行，违反者将被处以3年以下有期徒刑或3000万韩元以下罚款。
2024年：韩国国会以204票通过尹锡悦弹劾案，尹锡悦成为继朴槿惠后韩国第六共和国第二位被弹劾停权的韩国总统。
出生

1009年：後朱雀天皇，日本第69代天皇（1045年逝世）
1503年：諾斯特拉達姆士，法國預言家（1566年逝世）
1546年：第谷·布拉赫，丹麦天文学家兼占星術士、炼金术士（1601年逝世）
1689年：純懿皇貴妃，清世宗妃嬪，和親王弘晝之母（1785年逝世）
1824年：皮埃爾·夏凡納，法國畫家，國家美術協會共同創辦人、主席（1898年逝世）
1854年：張勳，中國清朝至中華民國時期軍閥（1923年逝世）
1883年：馬諾利斯·卡洛米里斯，希臘作曲家，創辦國家音樂學院，希臘民族樂派創始人之一（1962年逝世）
1883年：植芝盛平，日本武術家，合氣道創始人（1969年逝世）
1895年：喬治六世，英國國王（1952年逝世）
1895年：保爾·艾呂雅，法國詩人，超現實主義運動發起人之一（1952年逝世）
1896年：竹鶴麗塔，蘇格蘭裔日本企業家（1961年逝世）
1896年：詹姆斯·杜立德，美國空軍將領、特技飛行員和航空工程師（1993年逝世）
1897年：库爾特·許士尼格，奥地利第一共和國時期總理（1977年逝世）
1897年：拉扎爾·蓬蒂切利，法國政府承認的最後一位一戰老兵（2008年逝世）
1901年：保羅一世，希臘國王（1964年逝世）
1902年：豬熊弦一郎，日本西洋畫家（1993年逝世）
1909年：爱德華·劳里·塔特姆，美國遺傳學家，1958年諾貝爾生理學或醫學獎得主（1975年逝世）
1911年：漢斯·馮·奥海恩，德國物理學家，渦輪噴射發動機發明人（1998年逝世）
1914年：卡爾·卡斯滕斯，第五任德國聯邦總統（1992年逝世）
1918年：B·K·S·艾扬格，艾掦格瑜伽的創始人（2014年逝世）
1920年：李东英，中国稀有金属材料专家（2020年逝世）
1922年：尼古拉·巴索夫，蘇聯物理學家、教育家，1964年諾貝爾物理學獎得主（2001年逝世）
1924年：拉吉·卡浦爾，印度寶萊塢電影導演（1988年逝世）
1931年：弗蘭克·施龍茲，美國企業家，前任波音公司總裁（2024年逝世）
1934年：林尚義，香港足球運動員、評述員（2009年逝世）
1939年：史蒂芬·庫克，美國計算機科學家
1946年：卡立依布拉欣，馬來西亞政治人物，第14任雪蘭莪州務大臣（2022年逝世）
1946年：珍·柏金，英國女藝人、歌手、電影導演（2023年逝世）
1946年：斯坦·史密斯，美國男子網球運動員
1947年：約翰·米爾斯海默，美國政治學家
1947年：迪爾瑪·羅賽芙，巴西政治人物，第36任巴西總統，首位遭彈劾下台的女性國家元首
1948年：金·比兹利，澳大利亞工黨領袖
1952年：約翰·盧瑞爾，美國演員、樂手、畫家、製片
1953年：万耶利斯·米马拉基斯，希臘國防部長
1955年：世良公則，日本男歌手、演員
1956年：漢妮·文策爾，列支敦斯登高山滑雪運動員
1960年：克里斯·沃德爾，英格蘭足球運動員
1960年：易卜拉欣·萊希，伊朗政治人物，第8任伊朗總統（2024年逝世）
1961年：林超榮，香港傳媒人、電影編劇（2023年逝世）
1962年：翁家明，台灣演員
1962年：金格·林恩·爱倫，美國模特兒、演員
1965年：克雷格·比吉歐，退役美國職棒球員
1966年：陳國強，香港沙田區議員
1966年：赫勒·托寧-施密特，丹麥政治人物，第26任丹麥首相
1970年：安娜·瑪莉亞·約佩克，波蘭女音樂家、歌手
1972年：米蘭達·哈特，英格蘭演員、作家、單口喜劇演員
1973年：帕特·伯克，愛爾蘭職業籃球運動員
1973年：托馬斯·拉津斯基，波蘭裔加拿大足球運動員
1973年：阿拉伊克·阿魯秋尼揚，阿爾察赫共和國政治人物、經濟學家，現任阿爾札赫總統
1975年：卡迪·斯特瑞蘭德，美國女演員
1976年：彼得·盖德，丹麦男子羽球運動員
1976年：高度，持澳門執照的葡萄牙賽車手
1977年：桃井晴子，日本女性聲優
1978年：黃嘉樂，香港男藝人
1978年：，捷克足球運動員
1978年：帕蒂·施尼德，瑞士職業網球女運動員
1979年：後弦，中國歌手
1979年：莫愛芳，印尼華裔台灣女演員
1979年：中野美奈子，日本播報員
1979年：邁克爾·歐文，英格兰職業足球員
1979年：让-阿蘭·布姆松，喀麥隆裔法國足球運動員
1980年：塔塔楊，泰國女歌手、演員
1980年：戈登·格里爾，蘇格蘭職業足球運動員
1980年：迪迪埃·索高拿，象牙海岸足球員
1982年：史提夫·薛維爾，英格蘭足球運動員
1983年：馮曦妤，香港女歌手
1983年：朱曉輝，中國男模特兒、演員
1983年：克里斯·布朗特，北愛爾蘭足球運動員
1984年：傑克遜·拉斯波恩，美國男演員、歌手
1984年：拉納·達古巴提，印度男演員
1985年：李冠潔，台灣女性配音員
1985年：林惟毅，台灣節目主持人
1985年：雅庫布·布瓦什奇科夫斯基，波蘭足球運動員
1986年：張宰怙，韓國電競選手
1987年：馬克爾·蘇塞塔，西班牙足球運動員
1988年：黃昕瑜，香港女性配音員
1988年：村瀨步，日本男性聲優
1988年：坂本勇人，日本職棒選手
1988年：尼古拉·巴通姆，法國職業籃球運動員
1988年：凡妮莎·安·哈金斯，美國女歌手、演員
1989年：溫流，韓國男子偶像團體SHINee隊長
1990年：B-Bomb，韓國男子偶像團體Block B成員
1991年：高畑充希，日本女歌手、演員
1992年：宮市亮，日本職業足球運動員
1992年：托蕾·凱莉，美國女歌手、演員
1992年：胤祖，韓國女子偶像團體UNI+ G成員
1993年：保住有哉，日本男性聲優
1994年：井上小百合，日本女子偶像團體乃木坂46成員
1995年：許燦，韓國男子偶像團體VICTON成員
1996年：李子君，中國花样滑冰運動員
1998年：安第斯·林德，丹麥男子乒乓球運動員
1998年：盧卡斯·恩梅沙，奈及利亞裔德國職業足球員
1998年：金地雄，韓國男子偶像團體ZB1成員
2000年：崔元洪，韓國男演員
2000年：苗雅寧，中國男演員
2002年：法蘭西斯科·孔塞桑，葡萄牙職業足球員
2005年：李娜賢，韓國競速滑冰選手
2011年：玉曳璘，韓國兒童女演員
逝世

1332年：元宁宗懿璘质班，元朝皇帝（1326年出生）
1786年：羅伯特·豪，美國大陸軍將領（1732年出生）
1788年：卡爾·菲利普·埃曼努埃爾·巴赫，德國作曲家，约翰·塞巴斯蒂安·巴赫的次子，古典樂派開創者之一（1714年出生）
1799年：乔治·华盛顿，美國大陸軍軍官、政治人物、開國元勳，首任美國總統（1732年出生）
1806年：約翰·布雷肯里奇，美國政治人物，第5任美國司法部長（1760年出生）
1861年：阿爾伯特親王，英國維多利亞女王的表弟和丈夫（1819年出生）
1872年：約翰·弗雷德里克·肯塞特，美國風景畫家、雕刻家（1816年出生）
1873年：路易·阿加西，瑞士植物學家、動物學家、地質學家（1807年出生）
1878年：黑森和萊茵大公夫人愛麗絲公主，英國維多利亞女王次女、俄羅斯皇后亞歷山德拉·費奧多羅芙娜的母親，亦是英國菲利浦親王的外曾祖母（1843年出生）
1918年：路易·愛德華·比羅，法國植物學家、醫生（1830年出生）
1938年：莫里斯·埃马努埃尔，法國作曲家、音樂學家、音樂教育家（1862年出生）
1939年：海倫·克勒勒-米勒，德國藝術收藏家（1869年出生）
1947年：斯坦利·鮑德溫，英國政治人物，前任英國首相（1867年出生）
1984年：張瑛，香港男演員（1919年出生）
1989年：，蘇聯原子物理學家，1975年諾貝爾和平獎得主（1921年出生）
1997年：，英國作家，迹象文学社成員（1898年出生）
2002年：熊秉明，華裔法國哲學家、詩人、雕塑家（1922年出生）
2013年：彼得·奧圖，英國男演員（1932年出生）
2016年：保罗·埃瓦里斯托·阿恩斯，巴西枢机（1921年出生）
2017年：余光中，台湾诗人、文學家（1928年出生）
节假日和习俗

天主教：聖十字若望瞻禮
巴勒斯坦：教師節
：擁抱情人節
：知識份子殉難日（英语：）