轻松入门 学习 pandas

这篇博客介绍了pandas的基本操作,包括环境配置、对象创建、数据查看、选择、缺失数据处理、统计分析、数据合并、重塑、数据透视表等,适合Python数据分析初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方 10 分钟入门文档( http://pandas.pydata.org/pandas-docs/stable/10min.html)这是 pandas 的简短介绍,主要面向新用户。你可以看到更复杂的文档Cookbook( http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook)[toc]

Environment

  • pandas 0.21.0
  • python 3.6
  • jupyter notebook

开始

习惯上,我们导入如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

对象创建

具体参阅数据结构介绍
通过传递一个值列表来创建一个 Series,让 pandas 创建一个默认的整数索引:

In [4]: s = pd.Series([1,3,5,np.nan,6,8])

In [5]: s
Out[5]: 
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

通过传递具有日期时间索引和标签列的 numpy 数组来创建一个 DataFrame:

In [6]: dates = pd.date_range('20130101', periods=6)

In [7]: dates
Out[7]: 
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 [8]: df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

In [9]: df
Out[9]: 
                  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.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

通过传递一个可以转换为一系列对象的字典来创建一个 DataFrame。

In [10]: df2 = pd.DataFrame({ 'A' : 1.,
  ....:                      'B' : pd.Timestamp('20130102'),
  ....:                      'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
  ....:                      'D' : np.array([3] * 4,dtype='int32'),
  ....:                      'E' : pd.Categorical(["test","train","test","train"]),
  ....:                      'F' : 'foo' })
  ....: 

In [11]: df2
Out[11]: 
    A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3  test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3  test  foo
3  1.0 2013-01-02  1.0  3  train  foo

有特定的 dtypes

In [12]: df2.dtypes
Out[12]: 
A          float64
B    datetime64[ns]
C          float32
D            int32
E          category
F            object
dtype: object

如果您使用 IPython,按下 TAB 将提示补全。以下是将要完成的属性的子集:

In [13]: df2.<TAB>
df2.A                  df2.bool
df2.abs                df2.boxplot
df2.add                df2.C
df2.add_prefix        df2.clip
df2.add_suffix        df2.clip_lower
df2.align              df2.clip_upper
df2.all                df2.columns
df2.any                df2.combine
df2.append            df2.combine_first
df2.apply              df2.compound
df2.applymap          df2.consolidate
df2.D

如您所见,列 A,B,C 和 D 自动完成。 E 也在那里;为了简洁,其余的属性被省略。

查看数据

具体参阅基本部分(http://pandas.pydata.org/pandas-docs/stable/basics.html#basics
查看数据集中的最开始和最末尾的行

In [14]: df.head()
Out[14]: 
                  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.087401

In [15]: df.tail(3)
Out[15]: 
                  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

显示索引,列和底层 numpy 数据

In [16]: df.index
Out[16]: 
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 [17]: df.columns
Out[17]: Index(['A', 'B', 'C', 'D'], dtype='object')

In [18]: df.values
Out[18]: 
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 ]])

描述显示您的数据的快速统计结果( std 是标准偏差)

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

转置数据

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

按轴排序

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值