来源:https://uqer.io/community/share/5514bb11f9f06c12790415b2

####第二篇:快速进阶

在上一篇中我们介绍了如何创建并访问pandas的Series和DataFrame类型的数据,本篇将介绍如何对pandas数据进行操作,掌握这些操作之后,基本可以处理大多数的数据了。首先,导入本篇中使用到的模块:

1
import numpy as np

2
import pandas as pd

3
from pandas import Series, DataFrame

查看全部

为了看数据方便一些,我们设置一下输出屏幕的宽度

1
pd.set_option('display.width', 200)

查看全部

####一、数据创建的其他方式

数据结构的创建不止是上篇中介绍的标准形式,本篇再介绍几种。例如,我们可以创建一个以日期为元素的Series:

1
dates = pd.date_range('20150101', periods=5)

2
print dates

查看全部

<class 'pandas.tseries.index.DatetimeIndex'>[2015-01-01, ..., 2015-01-05]Length: 5, Freq: D, Timezone: None

将这个日期Series作为索引赋给一个DataFrame:

1
df = pd.DataFrame(np.random.randn(5, 4),index=dates,columns=list('ABCD'))

2
print df

查看全部

A B C D2015-01-01 -0.168870 0.191945 -0.906788 -1.2952112015-01-02 -0.985849 0.312378 -1.513870 -0.8768692015-01-03 -0.241945 1.437763 0.209494 0.0610322015-01-04 0.139199 0.124118 -0.204801 -1.7453272015-01-05 0.243644 -0.373126 0.333583 2.640955

只要是能转换成Series的对象,都可以用于创建DataFrame:

1
df2 = pd.DataFrame({ 'A' : 1., 'B': pd.Timestamp('20150214'), 'C': pd.Series(1.6,index=list(range(4)),dtype='float64'), 'D' : np.array([4] * 4, dtype='int64'), 'E' : 'hello pandas!' })

2
print df2

查看全部

A B C D E0 1 2015-02-14 1.6 4 hello pandas!1 1 2015-02-14 1.6 4 hello pandas!2 1 2015-02-14 1.6 4 hello pandas!3 1 2015-02-14 1.6 4 hello pandas!

####二、数据的查看

在多数情况下,数据并不由分析数据的人员生成,而是通过数据接口、外部文件或者其他方式获取。这里我们通过量化实验室的数据接口获取一份数据作为示例:

1
stock_list = ['000001.XSHE', '000002.XSHE', '000568.XSHE', '000625.XSHE', '000768.XSHE', '600028.XSHG', '600030.XSHG', '601111.XSHG', '601390.XSHG', '601998.XSHG']

2
raw_data = DataAPI.MktEqudGet(secID=stock_list, beginDate='20150101', endDate='20150131', pandas='1')

3
df = raw_data[['secID', 'tradeDate', 'secShortName', 'openPrice', 'highestPrice', 'lowestPrice', 'closePrice', 'turnoverVol']]

查看全部

以上代码获取了2015年一月份全部的交易日内十支股票的日行情信息,首先我们来看一下数据的大小:

1
print df.shape

查看全部

(200, 8)

我们可以看到有200行,表示我们获取到了200条记录,每条记录有8个字段,现在预览一下数据,dataframe.head()和dataframe.tail()可以查看数据的头五行和尾五行,若需要改变行数,可在括号内指定:

1
print "Head of this DataFrame:"

2
print df.head()

3
print "Tail of this DataFrame:"

4
print df.tail(3)

查看全部

Head of this DataFrame:
secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol0 000001.XSHE 2015-01-05 平安银行 15.99 16.28 15.60 16.02 2860436431 000001.XSHE 2015-01-06 平安银行 15.85 16.39 15.55 15.78 2166421402 000001.XSHE 2015-01-07 平安银行 15.56 15.83 15.30 15.48 1700120673 000001.XSHE 2015-01-08 平安银行 15.50 15.57 14.90 14.96 1407714214 000001.XSHE 2015-01-09 平安银行 14.90 15.87 14.71 15.08 250850023Tail of this DataFrame: secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol197 601998.XSHG 2015-01-28 中信银行 7.04 7.32 6.95 7.15 163146128198 601998.XSHG 2015-01-29 中信银行 6.97 7.05 6.90 7.01 93003445199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 68146718

dataframe.describe()提供了DataFrame中纯数值数据的统计信息:

1
print df.describe()

查看全部

openPrice highestPrice lowestPrice closePrice turnoverVolcount 200.00000 200.000000 200.00000 200.000000 2.000000e+02mean 15.17095 15.634000 14.86545 15.242750 2.384811e+08std 7.72807 7.997345 7.56136 7.772184 2.330510e+08min 6.14000 6.170000 6.02000 6.030000 1.242183e+0725% 8.09500 8.250000 7.98750 8.127500 7.357002e+0750% 13.96000 14.335000 13.75500 13.925000 1.554569e+0875% 19.95000 20.500000 19.46250 20.012500 3.358617e+08max 36.40000 37.250000 34.68000 36.150000 1.310855e+09

对数据的排序将便利我们观察数据,DataFrame提供了两种形式的排序。一种是按行列排序,即按照索引(行名)或者列名进行排序,可调用dataframe.sort_index,指定axis=0表示按索引(行名)排序,axis=1表示按列名排序,并可指定升序或者降序:

1
print "Order by column names, descending:"

2
print df.sort_index(axis=1, ascending=False).head()

查看全部

Order by column names, descending:
turnoverVol tradeDate secShortName secID openPrice lowestPrice highestPrice closePrice0 286043643 2015-01-05 平安银行 000001.XSHE 15.99 15.60 16.28 16.021 216642140 2015-01-06 平安银行 000001.XSHE 15.85 15.55 16.39 15.782 170012067 2015-01-07 平安银行 000001.XSHE 15.56 15.30 15.83 15.483 140771421 2015-01-08 平安银行 000001.XSHE 15.50 14.90 15.57 14.964 250850023 2015-01-09 平安银行 000001.XSHE 14.90 14.71 15.87 15.08

第二种排序是按值排序,可指定列名和排序方式,默认的是升序排序:

1
print "Order by column value, ascending:"

2
print df.sort(columns='tradeDate').head()

3
print "Order by multiple columns value:"

4
df = df.sort(columns=['tradeDate', 'secID'], ascending=[False, True])

5
print df.head()

查看全部

Order by column value, ascending:
secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol0 000001.XSHE 2015-01-05 平安银行 15.99 16.28 15.60 16.02 28604364320 000002.XSHE 2015-01-05 万科A 14.39 15.29 14.22 14.91 65608357040 000568.XSHE 2015-01-05 泸州老窖 20.50 21.99 20.32 21.90 5930475560 000625.XSHE 2015-01-05 长安汽车 16.40 18.07 16.32 18.07 8208798280 000768.XSHE 2015-01-05 中航飞机 18.76 19.88 18.41 19.33 84199357Order by multiple columns value: secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 13.93 14.12 13.76 13.93 9301166939 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 13.12 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293

####三、数据的访问和操作

#####3.1 再谈数据的访问

上篇中已经介绍了使用loc、iloc、at、iat、ix以及[]访问DataFrame数据的几种方式,这里再介绍一种方法,使用":"来获取部行或者全部列:

1
print df.iloc[1:4][:]

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol39 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 13.12 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 21233495

我们可以扩展上篇介绍的使用布尔类型的向量获取数据的方法,可以很方便地过滤数据,例如,我们要选出收盘价在均值以上的数据:

1
print df[df.closePrice > df.closePrice.mean()].head()

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol59 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 30421824558 000568.XSHE 2015-01-29 泸州老窖 19.04 19.23 19.00 19.15 12421826

isin()函数可方便地过滤DataFrame中的数据:

1
print df[df['secID'].isin(['601628.XSHG', '000001.XSHE', '600030.XSHG'])].head()

2
print df.shape

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 13.93 14.12 13.76 13.93 93011669139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 30421824518 000001.XSHE 2015-01-29 平安银行 13.82 14.01 13.75 13.90 101675329138 600030.XSHG 2015-01-29 中信证券 28.10 28.58 27.81 28.18 38631095717 000001.XSHE 2015-01-28 平安银行 13.87 14.30 13.80 14.06 124087755
(200, 8)

#####3.2 处理缺失数据

在访问数据的基础上,我们可以更改数据,例如,修改某些元素为缺失值:

1
df['openPrice'][df['secID'] == '000001.XSHE'] = np.nan

2
df['highestPrice'][df['secID'] == '601111.XSHG'] = np.nan

3
df['lowestPrice'][df['secID'] == '601111.XSHG'] = np.nan

4
df['closePrice'][df['secID'] == '000002.XSHE'] = np.nan

5
df['turnoverVol'][df['secID'] == '601111.XSHG'] = np.nan

6
print df.head(10)

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 NaN 14.12 13.76 13.93 9301166939 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 NaN 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293119 600028.XSHG 2015-01-30 中国石化 6.14 6.17 6.02 6.03 502445638139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 304218245159 601111.XSHG 2015-01-30 中国国航 7.92 NaN NaN 7.69 NaN179 601390.XSHG 2015-01-30 中国中铁 8.69 8.69 8.12 8.14 352357431199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 68146718

原始数据的中很可能存在一些数据的缺失,就如同现在处理的这个样例数据一样,处理缺失数据有多种方式。通常使用dataframe.dropna(),dataframe.dropna()可以按行丢弃带有nan的数据;若指定how='all'(默认是'any'),则只在整行全部是nan时丢弃数据;若指定thresh,则表示当某行数据非缺失列数超过指定数值时才保留;要指定根据某列丢弃可以通过subset完成。

1
print "Data size before filtering:"

2
print df.shape

3

4
print "Drop all rows that have any NaN values:"

5
print "Data size after filtering:"

6
print df.dropna().shape

7
print df.dropna().head(10)

8

9
print "Drop only if all columns are NaN:"

10
print "Data size after filtering:"

11
print df.dropna(how='all').shape

12
print df.dropna(how='all').head(10)

13

14
print "Drop rows who do not have at least six values that are not NaN"

15
print "Data size after filtering:"

16
print df.dropna(thresh=6).shape

17
print df.dropna(thresh=6).head(10)

18

19
print "Drop only if NaN in specific column:"

20
print "Data size after filtering:"

21
print df.dropna(subset=['closePrice']).shape

22
print df.dropna(subset=['closePrice']).head(10)

23

查看全部

Data size before filtering:
(200, 8)Drop all rows that have any NaN values:Data size after filtering:(140, 8) secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol59 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293119 600028.XSHG 2015-01-30 中国石化 6.14 6.17 6.02 6.03 502445638139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 304218245179 601390.XSHG 2015-01-30 中国中铁 8.69 8.69 8.12 8.14 352357431199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 6814671858 000568.XSHE 2015-01-29 泸州老窖 19.04 19.23 19.00 19.15 1242182678 000625.XSHE 2015-01-29 长安汽车 19.60 19.64 18.90 19.24 2554606098 000768.XSHE 2015-01-29 中航飞机 24.65 25.63 24.53 24.98 67095945Drop only if all columns are NaN:Data size after filtering:(200, 8) secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 NaN 14.12 13.76 13.93 9301166939 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 NaN 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293119 600028.XSHG 2015-01-30 中国石化 6.14 6.17 6.02 6.03 502445638139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 304218245159 601111.XSHG 2015-01-30 中国国航 7.92 NaN NaN 7.69 NaN179 601390.XSHG 2015-01-30 中国中铁 8.69 8.69 8.12 8.14 352357431199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 68146718Drop rows who do not have at least six values that are not NaNData size after filtering:(180, 8) secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 NaN 14.12 13.76 13.93 9301166939 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 NaN 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293119 600028.XSHG 2015-01-30 中国石化 6.14 6.17 6.02 6.03 502445638139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 304218245179 601390.XSHG 2015-01-30 中国中铁 8.69 8.69 8.12 8.14 352357431199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 6814671818 000001.XSHE 2015-01-29 平安银行 NaN 14.01 13.75 13.90 101675329Drop only if NaN in specific column:Data size after filtering:(180, 8) secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 NaN 14.12 13.76 13.93 9301166959 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293119 600028.XSHG 2015-01-30 中国石化 6.14 6.17 6.02 6.03 502445638139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 304218245159 601111.XSHG 2015-01-30 中国国航 7.92 NaN NaN 7.69 NaN179 601390.XSHG 2015-01-30 中国中铁 8.69 8.69 8.12 8.14 352357431199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 6814671818 000001.XSHE 2015-01-29 平安银行 NaN 14.01 13.75 13.90 101675329

有数据缺失时也未必是全部丢弃,dataframe.fillna(value=value)可以指定填补缺失值的数值

1
print df.fillna(value=20150101).head()

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 20150101.00 14.12 13.76 13.93 9301166939 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 20150101.00 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293

#####3.3 数据操作

Series和DataFrame的类函数提供了一些函数,如mean()、sum()等,指定0按列进行,指定1按行进行:

1
df = raw_data[['secID', 'tradeDate', 'secShortName', 'openPrice', 'highestPrice', 'lowestPrice', 'closePrice', 'turnoverVol']]

2
print df.mean(0)

查看全部

openPrice 1.517095e+01highestPrice 1.563400e+01lowestPrice 1.486545e+01closePrice 1.524275e+01turnoverVol 2.384811e+08dtype: float64

value_counts函数可以方便地统计频数:

1
print df['closePrice'].value_counts().head()

查看全部

6.58 313.12 29.13 28.58 26.93 2dtype: int64

在panda中,Series可以调用map函数来对每个元素应用一个函数,DataFrame可以调用apply函数对每一列(行)应用一个函数,applymap对每个元素应用一个函数。这里面的函数可以是用户自定义的一个lambda函数,也可以是已有的其他函数。下例展示了将收盘价调整到[0, 1]区间:

1
print df[['closePrice']].apply(lambda x: (x - x.min()) / (x.max() - x.min())).head()

查看全部

closePrice0 0.3316731 0.3237052 0.3137453 0.2964814 0.300465

使用append可以在Series后添加元素,以及在DataFrame尾部添加一行:

1
dat1 = df[['secID', 'tradeDate', 'closePrice']].head()

2
dat2 = df[['secID', 'tradeDate', 'closePrice']].iloc[2]

3
print "Before appending:"

4
print dat1

5
dat = dat1.append(dat2, ignore_index=True)

6
print "After appending:"

7
print dat

查看全部

Before appending:
secID tradeDate closePrice0 000001.XSHE 2015-01-05 16.021 000001.XSHE 2015-01-06 15.782 000001.XSHE 2015-01-07 15.483 000001.XSHE 2015-01-08 14.964 000001.XSHE 2015-01-09 15.08After appending: secID tradeDate closePrice0 000001.XSHE 2015-01-05 16.021 000001.XSHE 2015-01-06 15.782 000001.XSHE 2015-01-07 15.483 000001.XSHE 2015-01-08 14.964 000001.XSHE 2015-01-09 15.085 000001.XSHE 2015-01-07 15.48

DataFrame可以像在SQL中一样进行合并,在上篇中,我们介绍了使用concat函数创建DataFrame,这就是一种合并的方式。另外一种方式使用merge函数,需要指定依照哪些列进行合并,下例展示了如何根据security ID和交易日合并数据:

1
dat1 = df[['secID', 'tradeDate', 'closePrice']]

2
dat2 = df[['secID', 'tradeDate', 'turnoverVol']]

3
dat = dat1.merge(dat2, on=['secID', 'tradeDate'])

4
print "The first DataFrame:"

5
print dat1.head()

6
print "The second DataFrame:"

7
print dat2.head()

8
print "Merged DataFrame:"

9
print dat.head()

查看全部

The first DataFrame:
secID tradeDate closePrice0 000001.XSHE 2015-01-05 16.021 000001.XSHE 2015-01-06 15.782 000001.XSHE 2015-01-07 15.483 000001.XSHE 2015-01-08 14.964 000001.XSHE 2015-01-09 15.08The second DataFrame: secID tradeDate turnoverVol0 000001.XSHE 2015-01-05 2860436431 000001.XSHE 2015-01-06 2166421402 000001.XSHE 2015-01-07 1700120673 000001.XSHE 2015-01-08 1407714214 000001.XSHE 2015-01-09 250850023Merged DataFrame: secID tradeDate closePrice turnoverVol0 000001.XSHE 2015-01-05 16.02 2860436431 000001.XSHE 2015-01-06 15.78 2166421402 000001.XSHE 2015-01-07 15.48 1700120673 000001.XSHE 2015-01-08 14.96 1407714214 000001.XSHE 2015-01-09 15.08 250850023

DataFrame另一个强大的函数是groupby,可以十分方便地对数据分组处理,我们对2015年一月内十支股票的开盘价,最高价,最低价,收盘价和成交量求平均值:

1
df_grp = df.groupby('secID')

2
grp_mean = df_grp.mean()

3
print grp_mean

查看全部

openPrice highestPrice lowestPrice closePrice turnoverVolsecID 000001.XSHE 14.6550 14.9840 14.4330 14.6650 154710615000002.XSHE 13.3815 13.7530 13.0575 13.4100 277459431000568.XSHE 19.7220 20.1015 19.4990 19.7935 29199107000625.XSHE 19.4915 20.2275 19.1040 19.7170 42633332000768.XSHE 22.4345 23.4625 21.8830 22.6905 92781199600028.XSHG 6.6060 6.7885 6.4715 6.6240 531966632600030.XSHG 31.1505 32.0825 30.4950 31.2325 611544509601111.XSHG 8.4320 8.6520 8.2330 8.4505 104143358601390.XSHG 8.4060 8.6625 8.2005 8.4100 362831455601998.XSHG 7.4305 7.6260 7.2780 7.4345 177541066

如果希望取每只股票的最新数据,应该怎么操作呢?drop_duplicates可以实现这个功能,首先对数据按日期排序,再按security ID去重:

1
df2 = df.sort(columns=['secID', 'tradeDate'], ascending=[True, False])

2
print df2.drop_duplicates(subset='secID')

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol19 000001.XSHE 2015-01-30 平安银行 13.93 14.12 13.76 13.93 9301166939 000002.XSHE 2015-01-30 万科A 13.09 13.49 12.80 13.12 20962470659 000568.XSHE 2015-01-30 泸州老窖 19.15 19.51 19.11 19.12 1417717979 000625.XSHE 2015-01-30 长安汽车 19.16 19.45 18.92 19.18 2123349599 000768.XSHE 2015-01-30 中航飞机 25.38 25.65 24.28 24.60 59550293119 600028.XSHG 2015-01-30 中国石化 6.14 6.17 6.02 6.03 502445638139 600030.XSHG 2015-01-30 中信证券 28.50 28.72 27.78 27.86 304218245159 601111.XSHG 2015-01-30 中国国航 7.92 8.03 7.65 7.69 61877792179 601390.XSHG 2015-01-30 中国中铁 8.69 8.69 8.12 8.14 352357431199 601998.XSHG 2015-01-30 中信银行 7.10 7.14 6.92 6.95 68146718

若想要保留最老的数据,可以在降序排列后取最后一个记录,通过指定take_last=True(默认值为False,取第一条记录)可以实现:

1
print df2.drop_duplicates(subset='secID', take_last=True)

查看全部

secID tradeDate secShortName openPrice highestPrice lowestPrice closePrice turnoverVol0 000001.XSHE 2015-01-05 平安银行 15.99 16.28 15.60 16.02 28604364320 000002.XSHE 2015-01-05 万科A 14.39 15.29 14.22 14.91 65608357040 000568.XSHE 2015-01-05 泸州老窖 20.50 21.99 20.32 21.90 5930475560 000625.XSHE 2015-01-05 长安汽车 16.40 18.07 16.32 18.07 8208798280 000768.XSHE 2015-01-05 中航飞机 18.76 19.88 18.41 19.33 84199357100 600028.XSHG 2015-01-05 中国石化 6.59 7.14 6.45 7.14 1186499645120 600030.XSHG 2015-01-05 中信证券 33.90 35.25 33.01 34.66 698627215140 601111.XSHG 2015-01-05 中国国航 7.98 8.62 7.98 8.62 231611758160 601390.XSHG 2015-01-05 中国中铁 9.37 9.37 8.90 9.13 469902172180 601998.XSHG 2015-01-05 中信银行 8.15 8.33 7.91 8.16 337368242

####四、数据可视化

pandas数据直接可以绘图查看,下例中我们采用中国石化一月的收盘价进行绘图,其中set_index('tradeDate')['closePrice']表示将DataFrame的'tradeDate'这一列作为索引,将'closePrice'这一列作为Series的值,返回一个Series对象,随后调用plot函数绘图,更多的参数可以在matplotlib的文档中查看。

1
dat = df[df['secID'] == '600028.XSHG'].set_index('tradeDate')['closePrice']

2
dat.plot(title="Close Price of SINOPEC (600028) during Jan, 2015")

查看全部

<matplotlib.axes.AxesSubplot at 0x49b6510>

####参考文献

  1. http://pandas.pydata.org/pandas-docs/version/0.14.1

Python---第6天:数据处理的瑞士军刀pandas下篇相关推荐

  1. 量化分析师的Python日记【第6天:数据处理的瑞士军刀pandas下篇

    ####第二篇:快速进阶 在上一篇中我们介绍了如何创建并访问pandas的Series和DataFrame类型的数据,本篇将介绍如何对pandas数据进行操作,掌握这些操作之后,基本可以处理大多数的数 ...

  2. 第6天:数据处理的瑞士军刀pandas下篇

    本篇将介绍如何对pandas数据进行操作 import numpy as np import pandas as pd from pandas import Series, DataFrame 设置一 ...

  3. 【script】数据处理的瑞士军刀 pandas

    一.Pandas介绍 在Python中, pandas 包含了高级的数据结构 Series 和 DataFrame ,使得在Python中处理数据变得非常方便.快速和简单. pandas 不同的版本之 ...

  4. python常用模块(一) 数据处理 matplotlib numpy pandas

    如果要批量安装库的话,可以建立一个requirements.txt文件,里面写上 matplotlib==2.2.2     numpy==1.14.2     pandas==0.20.3     ...

  5. pandas dataframe column_数据处理的瑞士军刀pandas | 火星技术帖

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 投资区块链,猛戳:火星财经App下载

  6. python使用教程pandas-Python 数据处理库 pandas 入门教程基本操作

    pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有表现力的数据结 ...

  7. python 处理xml pandas_Python数据处理分析,解决pandas中所有的Excel疑难杂症(上)

    发现许多小伙伴入门Python几个月,还是低效率做数据处理.这套课程以形象的示意图,精心安排的案例,循序渐进带你玩转数据处理分析神器--pandas,课程中还有分析案例噢,干货满满! 前言 经过前2个 ...

  8. Python+大数据-数据处理与分析-pandas快速入门

    Python+大数据-数据处理与分析-pandas快速入门 1.Pandas快速入门 1.1DataFrame和Series介绍 1)DataFrame 用来处理结构化数据(SQL数据表,Excel表 ...

  9. python数据逆透视_Python数据神器pandas,轻松搞定嵌套表头——透视与逆透视

    发现许多小伙伴入门Python几个月,还是低效率做数据处理.这套课程以形象的示意图,精心安排的案例,循序渐进带你玩转数据处理分析神器--pandas,课程中还有分析案例噢,干货满满! 前言 上一节我们 ...

最新文章

  1. 企业网络推广方案浅析网站优化中外链该怎么发布?
  2. Types of intraclass correlation coefficience (ICC)
  3. Markdown2.py And Pygments Test
  4. 如何理解社交效应「蒸发式降温」?
  5. php grepmatch,linux最快的文本搜索神器ripgrep(grep的最好代替者)
  6. oracle的空闲等待事件,Oracle 常见的33个等待事件详解
  7. easyplayerpro 使用说明_EasyPlayerPro(Windows)流媒体播放器开发之ffmpeg log输出报错
  8. Python+sklearn使用朴素贝叶斯算法识别中文垃圾邮件
  9. linux shell学习三
  10. Windows Server 2008R2 Web服务器
  11. Git教程——如何创建一个版本库(Repository)
  12. Mac右键使用VS Code打开项目
  13. 【防火墙篇】02. 向导快速设置 ❀ Juniper 防火墙
  14. Matplotlib 设置支持中文的默认字体
  15. 数据库中锁机制的学习
  16. 分治法 divide and conquer
  17. 伪指令 - ARM汇编指令(四)
  18. mpp的文件是干嘛用的?
  19. 办公自动化:输入关键字,查找Excel里的内容_xing2516_新浪博客
  20. HTML列表 form表单 选择按钮

热门文章

  1. 【考研英语-阅读-基础】中心思想题(干扰选项排除)
  2. Pspice积分线路仿真问题汇总(压控电压源模拟理想运放)
  3. 英雄联盟 无法服务器未响应,Win7英雄联盟登陆服务器未响应的解决方法
  4. Anaconda画图中文和负号乱码问题
  5. 第三届蓝桥杯JavaC组国(决)赛真题
  6. 普通人可以做的3个靠谱副业,副业成刚需,上班不易
  7. Qcom Android 等相关名称缩写及意义
  8. Win7双网卡共享上网
  9. 怎样降低EDIUS中声音
  10. edge如何玩4399小游戏