说到Pandas,对于做数据分析和处理以及机器学习的同学,可以说是大名鼎鼎。我们可以用Pandas这个开源的Python包来做什么呢?可以做的事情太多了,以至于很多人可能只会用到其功能的一部分。
在Python的世界里,像这样的软件包可以说是非常的多,这也是为什么Python的用途如此之广的原因。看过我前面的文章的同学可能还记得,我们在讲列表的时候,用读取普通文件的方式去读取了一个CSV格式的文件。可能有些同学不清楚CSV是一个什么样的格式?其实很简单,它类似于Excel,不过分隔符是逗号。
本文我们将用Pandas来读取文件,并进行一些基本处理,让大家对Pandas来有一个基本的概念。我们仍然使用上次使用过的文件,但我们进行一些少许的删除修改,以方便大家查看和拷贝,文件内容如下。
date,open,high,low,close
19991110,29.5,29.8,27.0,27.75
19991111,27.58,28.38,27.53,27.71
19991112,27.86,28.3,27.77,28.05
19991115,28.2,28.25,27.7,27.75
19991116,27.88,27.97,26.48,26.55
19991117,26.5,27.18,26.37,27.18
19991118,27.2,27.58,26.78,27.02
19991119,27.5,27.53,26.8,26.88
19991122,26.88,26.95,26.3,26.45
19991123,26.45,26.55,26.1,26.45
我们仍然是用这样一个OHLC的数据来做示例,大家可以看到这个文件每一列对应有相应的名称,现在来看看如何用Pandas来读取这个文件。
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df)
就这么简单的两行代码,就可以将CSV格式文件的内容读出到一个Pandas的Dataframe中。我们来看看结果是怎么样的。注意我们这里使用四个‘>’符号来表示一个缩进。
>>>>date open high low close
0 19991110 29.50 29.80 27.00 27.75
1 19991111 27.58 28.38 27.53 27.71
2 19991112 27.86 28.30 27.77 28.05
3 19991115 28.20 28.25 27.70 27.75
4 19991116 27.88 27.97 26.48 26.55
5 19991117 26.50 27.18 26.37 27.18
6 19991118 27.20 27.58 26.78 27.02
7 19991119 27.50 27.53 26.80 26.88
8 19991122 26.88 26.95 26.30 26.45
9 19991123 26.45 26.55 26.10 26.45
我们现在将Pandas读取出来了,那么我们接下来如何对它进行访问和处理呢?其实也很简单,我们来看一些基本的操作!
获得一整列的值
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df['date'])
运行结果:
0 19991110
1 19991111
2 19991112
3 19991115
4 19991116
5 19991117
6 19991118
7 19991119
8 19991122
9 19991123
Name: date, dtype: int64
我们可以看到,最后打印出了这一列的Name和类型。
访问某行某列的元素
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df['date'][3])
运行结果:
19991115
获得某一行的所有元素
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df.loc[3,:])
其中loc是Pandas中用的比较多的,另外还有iloc是用index来进行定位的。有很多种不一样的用法,我们后面会专题来介绍。本文我们仅仅做一个初步的了解。
运行结果:
date 19991115.00
open 28.20
high 28.25
low 27.70
close 27.75
Name: 3, dtype: float64
我们可以看到读取出来的date的类型变成了浮点类型,实际使用的过程中我们可以指定类型,这部分后面会专题来讲一些技巧。
删除一列
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df.drop('close', axis=1))
运行结果:
>>>> date open high low
0 19991110 29.50 29.80 27.00
1 19991111 27.58 28.38 27.53
2 19991112 27.86 28.30 27.77
3 19991115 28.20 28.25 27.70
4 19991116 27.88 27.97 26.48
5 19991117 26.50 27.18 26.37
6 19991118 27.20 27.58 26.78
7 19991119 27.50 27.53 26.80
8 19991122 26.88 26.95 26.30
9 19991123 26.45 26.55 26.10
删除一行
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df.drop(df.index[1]))
运行结果:
date open high low close
0 19991110 29.50 29.80 27.00 27.75
2 19991112 27.86 28.30 27.77 28.05
3 19991115 28.20 28.25 27.70 27.75
4 19991116 27.88 27.97 26.48 26.55
5 19991117 26.50 27.18 26.37 27.18
6 19991118 27.20 27.58 26.78 27.02
7 19991119 27.50 27.53 26.80 26.88
8 19991122 26.88 26.95 26.30 26.45
9 19991123 26.45 26.55 26.10 26.45
我们可以看到,index为1这一行被删除了!在后面的文章里面我们会讲到如何重新进行索引,这里我们暂时不关注。
判断Dataframe是否为空
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
print(df.empty)
运行结果:
False
修改某行某列的值
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
df.at[1, 'date'] = 20190318
print(df)
运行结果:
>>>>date open high low close
0 19991110 29.50 29.80 27.00 27.75
1 20190318 27.58 28.38 27.53 27.71
2 19991112 27.86 28.30 27.77 28.05
3 19991115 28.20 28.25 27.70 27.75
4 19991116 27.88 27.97 26.48 26.55
5 19991117 26.50 27.18 26.37 27.18
6 19991118 27.20 27.58 26.78 27.02
7 19991119 27.50 27.53 26.80 26.88
8 19991122 26.88 26.95 26.30 26.45
9 19991123 26.45 26.55 26.10 26.45
接下来我们来看如何把Pandas Dataframe重新写入到CSV文件中。
import pandas as pd
file = 'ohlcv.txt'
df = pd.read_csv(file)
df.at[1, 'date'] = 20190318
df['factor'] = 1.0
df.to_csv(file, index=False)
我们可以看到文件的内容变为:
date,open,high,low,close,factor
19991110,29.5,29.8,27.0,27.75,1.0
20190318,27.58,28.38,27.53,27.71,1.0
19991112,27.86,28.3,27.77,28.05,1.0
19991115,28.2,28.25,27.7,27.75,1.0
19991116,27.88,27.97,26.48,26.55,1.0
19991117,26.5,27.18,26.37,27.18,1.0
19991118,27.2,27.58,26.78,27.02,1.0
19991119,27.5,27.53,26.8,26.88,1.0
19991122,26.88,26.95,26.3,26.45,1.0
19991123,26.45,26.55,26.1,26.45,1.0
对,除了修改了第1行的日期,我们还添加了一列Factor值全部为1.0。
对Pandas的理解我们就讨论到这里,目的主要是为了让大家有一个基本的认识。其实大家可以看到区区几行代码,已经做了我们用其他语言几百上千行代码的事情。我想如果阅读了我前面的文章的同学看到这里,应该会对Python产生了浓厚的兴趣。从文章的内容,大家也应该可以发现Python真的是非常的简单,也非常的容易入门和学习的一门语言。其实,深度学习也是一样,大家讳莫如深的人工智能和深度学习,我们从应用的角度来讲,也是一门跨行业跨领域都可以学习的技术。
人工智能与深度学习做量化请关注:AI量化(https://t.zsxq.com/RvfY37y) 星球限时免费,如需加入,请私信我获得免费邀请码!
零基础学习Python与深度学习应用请关注星球:Python与深度学习 https://t.zsxq.com/bUFayZ3
微信公众号:QTechAI
网友评论