炼数成金 门户 大数据 Python 查看内容

pandas系列学习(一):pandas入门

2018-10-29 14:22| 发布者: 炼数成金_小数| 查看: 15018| 评论: 0|原作者: chen_h|来自: coderpai

摘要: pandas 是一套用于 Python 的快速,高效的数据分析工具。近年来它的受欢迎程度飙升,与数据科学和机器学习等领域的兴起同步。正如 Numpy 提供了基础的数据类型,pandas 也提供了核心数组操作,它定义了处理数据的基 ...

Python 工具 Java Hadoop 培训 Pandas

介绍
pandas 是一套用于 Python 的快速,高效的数据分析工具。近年来它的受欢迎程度飙升,与数据科学和机器学习等领域的兴起同步。


正如 Numpy 提供了基础的数据类型,pandas 也提供了核心数组操作,它定义了处理数据的基本结构,并且赋予了它们促进操作的方法,例如:

读取数据
调整索引
使用日期和时间序列
排序,分组,重新排序和一般数据调整
处理缺失值等等
跟复杂的统计和分析功能留给其他软件包,例如 statsmodels 和 scikit-learn,它们构建在 pandas 之上。接下来,开始我们的学习,首先我们来导入我们需要的数据包:
import
 pandas 
as
 pd
import
 numpy 
as
 np
Series

由 pandas 定义的两种重复数据类型是 Series 和 DataFrame,你可以将 Series 看做是一个 column,例如对单个变量的观察集合。DataFrame 是多个数据相关的 Series 的集合。

接下来,让我们从 Series 开始学习。

=
 pd
.
Series
(
np
.
random
.
randn
(
4
),
 name 
=
 
"daily returns"
)
s
0
    
1.528827
1
   
-
0.836487
2
   
-
1.932910
3
   
-
1.006040
Name
:
 daily returns
,
 dtype
:
 float64
在这里,你可以将索引 0,1,2,3 想象成四家上市公司的索引,其对应的值是其股票的每日回报。pandas Series 是基于 numpy 阵列构建,支持许多相似的操作。

*
 
100
0
    
152.882717
1
    
-
83.648681
2
   
-
193.290987
3
   
-
100.603970
Name
:
 daily returns
,
 dtype
:
 float64
np
.
abs
(
s
)
0
    
1.528827
1
    
0.836487
2
    
1.932910
3
    
1.006040
Name
:
 daily returns
,
 dtype
:
 float64
但是 Series 提供的不仅仅是 Numpy 数组,他们还有一些额外的方法(偏向于统计)。

s
.
describe
()
count    
4.000000
mean    
-
0.561652
std      
1.474615
min     
-
1.932910
25
%
     
-
1.237757
50
%
     
-
0.921263
75
%
     
-
0.245158
max      
1.528827
Name
:
 daily returns
,
 dtype
:
 float64
我们还可以自定义索引的值,比如:
s
.
index 
=
 
[
'AMZN'
,
 
'AAPL'
,
 
'MSFT'
,
 
'GOOG'
]
s
AMZN    
1.528827
AAPL   
-
0.836487
MSFT   
-
1.932910
GOOG   
-
1.006040
Name
:
 daily returns
,
 dtype
:
 float64
通过这种方式查看,Series 就像快速,高效的 Python 词典。实际上,你可以使用与 Python 字典大致相同的语法来操作。

s
[
'AMZN'
]
1.528827
s
[
'AMZN'
]
 
=
 
0
s
AMZN    
0.000000
AAPL   
-
0.836487
MSFT   
-
1.932910
GOOG   
-
1.006040
Name
:
 daily returns
,
 dtype
:
 float64
'AAPL'
 
in
 s
True

DataFrames
虽然 Series 非常有效,但是它是单列数据,有时候我们想处理多列数据怎么办呢?DataFrame 帮我们解决了这个问题,它是多列数据,每一列代表一个变量。实质上,pandas 中的 DataFrame 类似于(高度优化的)Excel 电子表格。因此,它是一种强大的工具,用于表示和分析自然组织成行和列的数据,通常具有针对各行和各列的描述性索引。我们来举个例子,比如我这边有一个 csv 文件,你可以点击这里下载。数据展示如下:

"country"
,
"country isocode"
,
"year"
,
"POP"
,
"XRAT"
,
"tcgdp"
,
"cc"
,
"cg"
"Argentina"
,
"ARG"
,
"2000"
,
"37335.653"
,
"0.9995"
,
"295072.21869"
,
"75.716805379"
,
"5.5788042896"
"Australia"
,
"AUS"
,
"2000"
,
"19053.186"
,
"1.72483"
,
"541804.6521"
,
"67.759025993"
,
"6.7200975332"
"India"
,
"IND"
,
"2000"
,
"1006300.297"
,
"44.9416"
,
"1728144.3748"
,
"64.575551328"
,
"14.072205773"
"Israel"
,
"ISR"
,
"2000"
,
"6114.57"
,
"4.07733"
,
"129253.89423"
,
"64.436450847"
,
"10.266688415"
"Malawi"
,
"MWI"
,
"2000"
,
"11801.505"
,
"59.543808333"
,
"5026.2217836"
,
"74.707624181"
,
"11.658954494"
"South Africa"
,
"ZAF"
,
"2000"
,
"45064.098"
,
"6.93983"
,
"227242.36949"
,
"72.718710427"
,
"5.7265463933"
"United States"
,
"USA"
,
"2000"
,
"282171.957"
,
"1"
,
"9898700"
,
"72.347054303"
,
"6.0324539789"
"Uruguay"
,
"URY"
,
"2000"
,
"3219.793"
,
"12.099591667"
,
"25255.961693"
,
"78.978740282"
,
"5.108067988"
假设你将此数据保存为当前工作目录中的 test_pwt.csv(在 Jupyter 中键入 %pwd 可以查看它是什么),我们可以按照如下形式进行读入数据:

df 
=
 pd
.
read_csv
(
'https://github.com/QuantEcon/QuantEcon.lectures.code/raw/master/pandas/data/test_pwt.csv'
)
type
(
df
)
pandas
.
core
.
frame
.
DataFrame
df

我们可以使用标准的 Python 数据切片表示法选择特定的行:

要选择列,我们可以传递一个列表,其中包含表示为字符串的所需列的名称:

要使用整数选择行和列,我们可以使用 iloc 属性,格式为 .iloc[rows, columns]

要使用整数和标签的混合来选择行和列,我们可以以类似的方法使用 loc 属性。

让我们想象一下,我们只关注人口和GDP(tcgdp),将数据帧 df 剥离到仅这些变量的一种方法是使用上述选择方法覆盖数据帧。

这里索引 0,1,....,7 是多余的,因为我们可以使用国家名称作为索引。为此,我们将索引设置为数据框中的国家/地区变量

让我们给列取一个稍微好一点的名字

表中人口数以千计算,让我们来恢复一下,按照个计算:

接下来我们将添加一个现实人均实际 GDP 的列,随着时间的推移乘以 1000000,因为总 GDP 为数百万

关于 pandas DataFrame 和 Series 对象的一个好处是它们具有通过 Matplotlib 工作的绘图和可视化方法。例如,我们可以轻松生成人均 GDP 的条形图。

import
 matplotlib
.
pyplot 
as
 plt
df
[
'GDP percap'
].
plot
(
kind
=
'bar'
)
plt
.
show
()


目前,数据框按照国家/地区的字母顺序排序——让我们将其改为人均 GDP。

我们继续来画图:

    
声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过
1

鸡蛋

刚表态过的朋友 (1 人)

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-11-20 08:37 , Processed in 1.420829 second(s), 25 queries .