Python数据分析pandas入门(一)------十分钟入门pandas

一、导入常用库

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

二、创建对象

(1)通过传递一个list来创建Series,pandas会默认创建整型索引

代码如下:

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

运行结果如下:

0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

说明:Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的。

(2)通过传递一个numpy array,日期索引以及列标签来创建一个DataFrame

代码如下:

dates = pd.date_range('20210101', periods=6)
print(dates)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)

运行结果如下:

DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
               '2021-01-05', '2021-01-06'],
              dtype='datetime64[ns]', freq='D')
                   A         B         C         D
2021-01-01  0.332594  1.151379  0.155028  1.914757
2021-01-02  1.681969 -1.157997  0.340231  2.054462
2021-01-03 -1.351239 -0.636244 -1.670505 -0.577896
2021-01-04  1.091745 -0.265513 -0.585511  0.462430
2021-01-05 -0.945369 -0.416703 -0.833535  0.446753
2021-01-06  0.712920  0.223502 -1.158448  0.046709

(3)通过传递一个能够被转换为类似series的dict对象来创建一个DataFrame

代码如下:

df2 = pd.DataFrame({
   'A': 1.,
                    'B': pd.Timestamp('20200629'),
                    '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'})
print(df2)
print(df2.dtypes)

运行结果如下:

     A          B    C  D      E    F
0  1.0 2020-06-29  1.0  3   test  foo
1  1.0 2020-06-29  1.0  3  train  foo
2  1.0 2020-06-29  1.0  3   test  foo
3  1.0 2020-06-29  1.0  3  train  foo
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object

三、查看数据

(1)查看frame中头部和尾部的几行

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.head())    # 查看头部几行
print(df.tail(3))   # 查看尾部几行

运行结果如下:

                   A         B         C         D
2021-01-01 -0.854651 -0.610823 -0.167534  0.792160
2021-01-02  0.493142  0.580007  0.204097 -0.461438
2021-01-03  0.281382 -1.412539  3.594873 -0.130037
2021-01-04 -0.020957  0.013987 -2.404149 -0.277812
2021-01-05 -1.464734  0.144639 -0.667339  0.917941
                   A         B         C         D
2021-01-04 -0.020957  0.013987 -2.404149 -0.277812
2021-01-05 -1.464734  0.144639 -0.667339  0.917941
2021-01-06  1.813891 -1.379392 -1.490363 -0.954958

(2)显示索引、列名以及底层的numpy数据

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.index)    # 显示索引
print(df.columns)   # 显示列名
print(df.values)   # 底层numpy数据

运行结果如下:

DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
               '2021-01-05', '2021-01-06'],
              dtype='datetime64[ns]', freq='D')
Index(['A', 'B', 'C', 'D'], dtype='object')
[[ 0.54760061 -1.52821104  0.98156267 -1.3086871 ]
 [ 1.08947302 -0.27957116 -0.99159702  0.56656625]
 [-0.56661193  0.73175369  0.84474106 -0.01924194]
 [ 0.40981963 -1.23025219  1.31332923  1.16469658]
 [-0.0996665   0.42960539  0.15250292  0.5774405 ]
 [-0.05484658  0.70352716  0.88048923  1.0268004 ]]

(3)describe()能对数据做一个快速统计汇总

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.describe())    # 快速统计汇总

运行结果如下:

              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean  -0.037825 -0.684544  0.074748 -0.393371
std    1.221381  0.651434  0.445844  1.016243
min   -1.638185 -1.327833 -0.581986 -1.639139
25%   -0.866597 -1.061551 -0.204719 -1.129647
50%   -0.116033 -0.838348  0.128008 -0.347528
75%    0.977540 -0.567642  0.455081  0.123801
max    1.418020  0.510622  0.525979  1.083412

(4)对数据做转置

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.T)    # 对数据做转置

运行结果如下:

   2021-01-01  2021-01-02  2021-01-03  2021-01-04  2021-01-05  2021-01-06
A   -0.924087    1.036039    2.380802    0.396621   -1.344227   -0.060524
B   -1.223318    1.818642   -1.659037    0.440670   -2.068355    0.660393
C    0.028661   -0.739622   -0.702494    0.767255   -0.027886    0.712692
D   -0.352344    1.421342   -0.915466    0.192375    1.665294   -0.865071

(5)按轴进行排序

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.sort_index(axis=1, ascending=False))    # 按轴进行排序

运行结果如下:

                   D         C         B         A
2021-01-01  0.147621  0.372596  0.403472 -1.462936
2021-01-02 -0.433823 -0.649770 -1.840609 -0.191425
2021-01-03  0.279578  1.917370  0.931369 -0.226179
2021-01-04  1.420825  1.596096 -1.250926  0.597007
2021-01-05  0.928866  0.465932 -1.089402 -0.060359
2021-01-06  0.175272 -0.152957  0.535680  1.290633

(5)按值进行排序

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.sort_values(by='B'))    # 按值进行排序

运行结果如下:

                   A         B         C         D
2021-01-02  1.103506 -0.595645  0.666151  1.309689
2021-01-03  0.021516 -0.091451  0.024281 -0.598654
2021-01-01 -1.565367  0.163802  0.425172 -2.247528
2021-01-05  3.003356  0.336145 -1.738533 -0.084639
2021-01-04  0.699287  0.706519  0.891762 -1.278873
2021-01-06  0.987927  1.177693 -0.741832  1.223762

注意:虽然标准的Python/Numpy的表达式能完成选择与赋值等功能,但我们仍推荐使用优化过的pandas数据访问方法:.at,.iat,.loc,.iloc和.ix

四、选取

(1)选择某一列数据,它会返回一个Series,等同于df.A

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.A)

运行结果如下:

2021-01-01   -0.111543
2021-01-02   -0.656968
2021-01-03   -0.688010
2021-01-04   -1.589676
2021-01-05   -0.678847
2021-01-06    2.115350
Freq: D, Name: A, dtype: float64

(2)通过使用[]进行切片选取

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df[0:3])
print(df['20210102':'20210104'])

运行结果如下:

                   A         B         C         D
2021-01-01 -0.047732  0.552092 -0.729498 -0.714394
2021-01-02  0.591364 -1.105802 -0.762140 -0.612312
2021-01-03 -0.065074 -0.839530 -1.497781  0.126298

                   A         B         C         D
2021-01-02  0.738849 -1.043999 -0.521313 -0.224035
2021-01-03  0.111772 -1.778993  2.102982  0.245293
2021-01-04  0.715842  0.664216  0.229961 -1.134740

五、通过标签选取

(1)通过标签进行交叉选取

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 通过标签进行交叉选取
print(df.loc[dates[0]])

运行结果如下:

A    0.419647
B   -0.213496
C   -0.247529
D   -1.832256
Name: 2021-01-01 00:00:00, dtype: float64

(2)使用标签对多个轴进行选取

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
#  使用标签对多个轴进行选取
print(df.loc[:, ['A', 'B']])
print(df.loc[:, ['A', 'B']][:3])

运行结果如下:

                   A         B
2021-01-01  2.682915 -0.914341
2021-01-02  0.583982  0.282933
2021-01-03 -0.191259  0.195227
2021-01-04 -1.560690  0.035329
2021-01-05 -1.130526  2.553366
2021-01-06 -0.021148  0.385572
                   A         B
2021-01-01  2.682915 -0.914341
2021-01-02  0.583982  0.282933
2021-01-03 -0.191259  0.195227

(3)进行标签切片,包含两个端点

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 进行标签切片,包含两个端点
print(df.loc['20210102':'20210104', ['A', 'B']])

运行结果如下:

                   A         B
2021-01-02  0.583693 -1.117799
2021-01-03  1.105072 -1.793949
2021-01-04 -1.167001 -0.817904

(4)对返回的对象进行降维处理

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 对返回的对象进行降维处理
print(df.loc['20210102', ['A', 'B']])

运行结果如下:

A   -0.778794
B   -0.015910
Name: 2021-01-02 00:00:00, dtype: float64

(5)获取一个标量

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 获取一个标量
print(df.loc[dates[0], 'A'])

运行结果如下:

1.428208723016515

(6)快速获取标量(与上面方法等价)

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 快速获取标量(与上面方法等价)
print(df.at[dates[0], 'A'])

运行结果如下:

1.428208723016515

六、通过位置选取

(1)通过传递整型的位置进行选取

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.iloc[3])

运行结果如下:

A    0.935744
B    0.460515
C   -0.636717
D    0.918826
Name: 2021-01-04 00:00:00, dtype: float64

(2)通过整型的位置切片进行选取(与python/numpy形式相同)

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.iloc[3:5, 0:2])

运行结果如下:

                   A         B
2021-01-04 -0.731813 -0.007271
2021-01-05 -0.098682 -1.033287

(3)只对行进行切片

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.iloc[1:3, :])

运行结果如下:

                   A         B         C         D
2021-01-02  1.725870  0.316616 -0.226371  2.271909
2021-01-03 -0.701184 -0.101915  1.670719 -1.069785

(4)只对列进行切片

代码如下:

dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值