10 Minutes to pandas(pandas官方网站的翻译)

本文主要参考官方网站对pandas的介绍,加上自己的理解,有不对的地方多多包涵哈!!!

pandas模块介绍

##通常会加载以下模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

一、创建对象

1.通过列表的值创建Series

  Series是pandas提供的以为数组,它类似于numpy中的Array,pandas默认会创建一个整数的索引,但也可以是字符型的索引
s = pd.Series([1,3,5,np.nan,6,8])

s
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64
s = pd.Series([1,3,5,np.nan,6,8],[1:6])   #Series只能是一维的数组,当维数大于1时将会报错
  File "<ipython-input-5-60a74e784ef2>", line 1
    s = pd.Series([1,3,5,np.nan,6,8],[1:6])   #Series只能是一维的数组,当维数大于1时将会报错
                                       ^
SyntaxError: invalid syntax

2.通过numpy array 创建DataFrame,并带有日期索引和列标签

在pandas中有一个非常常用的函数date_range,尤其是在处理时间序列数据时,这个函数的作用就是产生一个DatetimeIndex,就是时间序列数据的索引。
函数原型pandas.date_range(start=None, end=None, periods=None, freq=’D’, tz=None, normalize=False, name=None, closed=None, **kwargs)

参数:(1)start:string或datetime-like,默认值是None,表示日期的起点。
(2)end:string或datetime-like,默认值是None,表示日期的终点。
(3)periods:integer或None,默认值是None,表示你要从这个函数产生多少个日期索引值;如果是None的话,那么start和end必须不能为None。
(4)freq:string或DateOffset,默认值是’D’,表示以自然日为单位,这个参数用来指定计时单位,比如’5H’表示每隔5个小时计算一次。
(5)tz:string或None,表示时区,例如:’Asia/Hong_Kong’。
(6)normalize:bool,默认值为False,如果为True的话,那么在产生时间索引值之前会先把start和end都转化为当日的午夜0点。
(7)name:str,默认值为None,给返回的时间索引指定一个名字。
(8)closed:string或者None,默认值为None,表示start和end这个区间端点是否包含在区间内,可以有三个值,’left’表示左闭右开区间,’right’表示左开右闭区间,None表示两边都是闭区间。

返回值:DatetimeIndex

pd.date_range(start="20130104",end="20130110")  #产生时间序列数据的索引

dates = pd.date_range('20130101', periods=6)  #产生6个时间序列数据的索引
dates
DatetimeIndex(['2013-01-04', '2013-01-05', '2013-01-06', '2013-01-07',
               '2013-01-08', '2013-01-09', '2013-01-10'],
              dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) #dataframe是一个类似表的结构,由多个Series组成,而Series在dataframe中叫做columns
df
  A B C D
2013-01-01 0.765232 0.692670 1.141776 2.540531
2013-01-02 -0.898543 -0.659491 -0.430778 0.570982
2013-01-03 -0.025247 0.015063 -1.915272 0.372160
2013-01-04 -0.139174 1.516186 -1.151047 -0.389001
2013-01-05 0.663521 -0.280017 -0.995703 3.404915
2013-01-06 -0.203886 0.695235 1.311637 0.568774

3.通过dict的对象来创建想series一样的Dataframe

  Dataframe的行为索引index,列为labels
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' })
df2
  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
df2.dtypes  #查看dataframe中每一列的类型
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object
df2.<TAB> #如果你用的是IPython,输入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
  File "<ipython-input-13-915637deb483>", line 1
    df2.<TAB>
        ^
SyntaxError: invalid syntax

二、查看数据

1.查看数据框中的top & bottom行

df.head()  #默认是查看数据框中的前5行
  A B C D
2013-01-01 -0.087393 0.872594 0.251184 1.149018
2013-01-02 1.655268 0.616169 -0.379986 1.327039
2013-01-03 0.042210 1.488178 -0.983630 0.323413
2013-01-04 0.271114 -0.088969 0.567894 0.928066
2013-01-05 2.147626 0.291387 0.489159 0.445913
df.head(6) #可指定查看的行数
  A B C D
2013-01-01 -0.087393 0.872594 0.251184 1.149018
2013-01-02 1.655268 0.616169 -0.379986 1.327039
2013-01-03 0.042210 1.488178 -0.983630 0.323413
2013-01-04 0.271114 -0.088969 0.567894 0.928066
2013-01-05 2.147626 0.291387 0.489159 0.445913
2013-01-06 0.131625 0.264920 -1.441035 -1.163547
df.tail(3) #查看数据框中的后3行
  A B C D
2013-01-04 0.271114 -0.088969 0.567894 0.928066
2013-01-05 2.147626 0.291387 0.489159 0.445913
2013-01-06 0.131625 0.264920 -1.441035 -1.163547

2.查看index,colums和底层的数据

df.index  #查看数据框中的索引
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
df.columns  #查看数据框中的每一列
Index(['A', 'B', 'C', 'D'], dtype='object')
df.values #查看df中的值
array([[-0.0873935 ,  0.87259398,  0.25118408,  1.14901843],
       [ 1.65526787,  0.61616926, -0.37998566,  1.32703857],
       [ 0.04220978,  1.48817811, -0.98362978,  0.32341307],
       [ 0.27111352, -0.08896946,  0.56789422,  0.92806564],
       [ 2.14762554,  0.29138675,  0.48915928,  0.44591301],
       [ 0.13162548,  0.2649196 , -1.44103542, -1.16354691]])
df.describe() #统计每一列的统计量,包括计数,均值,标准差,最小值,25%分位数,75%分位数,50%中位数,最大值
  A B C D
count 6.000000 6.000000 6.000000 6.000000
mean 0.693408 0.574046 -0.249402 0.501650
std 0.955779 0.555263 0.829478 0.904427
min -0.087393 -0.088969 -1.441035 -1.163547
25% 0.064564 0.271536 -0.832719 0.354038
50% 0.201369 0.453778 -0.064401 0.686989
75% 1.309229 0.808488 0.429665 1.093780
max 2.147626 1.488178 0.567894 1.327039
 df.T #转置数据框
  2013-01-01 00:00:00 2013-01-02 00:00:00 2013-01-03 00:00:00 2013-01-04 00:00:00 2013-01-05 00:00:00 2013-01-06 00:00:00
A -0.087393 1.655268 0.042210 0.271114 2.147626 0.131625
B 0.872594 0.616169 1.488178 -0.088969 0.291387 0.264920
C 0.251184 -0.379986 -0.983630 0.567894 0.489159 -1.441035
D 1.149018 1.327039 0.323413 0.928066 0.445913 -1.163547

3.排序

(1)索引排序

 df.sort_index() #索引排序,默认axis=0,ascending=True,升序排序
  A B C D
2013-01-01 -0.087393 0.872594 0.251184 1.149018
2013-01-02 1.655268 0.616169 -0.379986 1.327039
2013-01-03 0.042210 1.488178 -0.983630 0.323413
2013-01-04 0.271114 -0.088969 0.567894 0.928066
2013-01-05 2.147626 0.291387 0.489159 0.445913
2013-01-06 0.131625 0.264920 -1.441035 -1.163547
df.sort_index(axis=1, ascending=False)# 对列进行排序,ascending=False 降序
  D C B A
2013-01-01 1.149018 0.251184 0.872594 -0.087393
2013-01-02 1.327039 -0.379986 0.616169 1.655268
2013-01-03 0.323413 -0.983630 1.488178 0.042210
2013-01-04 0.928066 0.567894 -0.088969 0.271114
2013-01-05 0.445913 0.489159 0.291387 2.147626
2013-01-06 -1.163547 -1.441035 0.264920 0.131625

(2)值排序

df.sort_values(by='B') #按列B的值从小排列到大,默认是升序
  A B C D
2013-01-02 -0.898543 -0.659491 -0.430778 0.570982
2013-01-05 0.663521 -0.280017 -0.995703 3.404915
2013-01-03 -0.025247 0.015063 -1.915272 0.372160
2013-01-01 0.765232 0.692670 1.141776 2.540531
2013-01-06 -0.203886 0.695235 1.311637 0.568774
2013-01-04 -0.139174 1.516186 -1.151047 -0.389001
df.sort_values(by='B',ascending=False)   #按B列的值从大排列到小
  A B C D
2013-01-04 -0.139174 1.516186 -1.151047 -0.389001
2013-01-06 -0.203886 0.695235 1.311637 0.568774
2013-01-01 0.765232 0.692670 1.141776 2.540531
2013-01-03 -0.025247 0.015063 -1.915272 0.372160
2013-01-05 0.663521 -0.280017 -0.995703 3.404915
2013-01-02 -0.898543 -0.659491 -0.430778 0.570982
df.sort_values(by=["A","C"]) #按A,C列的值排列
  A B C D
2013-01-01 -0.087393 0.872594 0.251184 1.149018
2013-01-03 0.042210 1.488178 -0.983630 0.323413
2013-01-06 0.131625 0.264920 -1.441035 -1.163547
2013-01-04 0.271114 -0.088969 0.567894 0.928066
2013-01-02 1.655268 0.616169 -0.379986 1.327039
2013-01-05 2.147626 0.291387 0.489159 0.445913

三.选择数据

1.通过索引index

df['A']  #选择单列,结果产生一个Series,等价于df.A
2013-01-01   -0.087393
2013-01-02    1.655268
2013-01-03    0.042210
2013-01-04    0.271114
2013-01-05    2.147626
2013-01-06    0.131625
Freq: D, Name: A, dtype: float64
df[0:3] #通过[],对行进行切片,选择前3行.
  A B C D
2013-01-01 -0.087393 0.872594 0.251184 1.149018
2013-01-02 1.655268 0.616169 -0.379986 1.327039
2013-01-03 0.042210 1.488178 -0.983630 0.323413
df['20130102':'20130104'] #通过索引进行切片
  A B C D
2013-01-02 1.655268 0.616169 -0.379986 1.327039
2013-01-03 0.042210 1.488178 -0.983630 0.323413
2013-01-04 0.271114 -0.088969 0.567894 0.928066

2.通过具体标签label选取列,使用datafram.loc。

有以下三种形式,
df.loc[行标签,列标签]
df.loc['a':'b'] #选取ab两行数据
df.loc[:,'one'] #选取one列的数据 df.loc的第一个参数是行标签,第二个参数为列标签(可选参数,默认为所有列标签),两个参数既可以是列表也可以是单个字符,如果两个参数都为列表则返回的是DataFrame,否则,则为Series。

dates = pd.date_range('20130101', periods=6)
dates
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
dates[0]  #选择dates中的第一条记录
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值