1.python pandas怎么用
安装pandas
1. Anaconda
安装pandas、Python和SciPy最简单的方式是用Anaconda。Anaconda是关于Python数据分析和科学计算的分发包。
2. Miniconda
使用Anaconda会安装一百多个依赖包,如果想灵活控制安装的依赖包或带宽有限,使用Miniconda是个不错的选择。
Conda是个包管理器,Anaconda就是建立在它的基础上。Conda不只跨平台还与语言无关,与pip和virtualenv相结合的作用相似。
Miniconda允许先创建包含Python的安装包,然后用conda安装其他的依赖包。
3. Pypi
pandas可以通过pip安装,但要安装相关的依赖包。
pip install pandas
4. 包管理器
可以用linux的包管理器进行安装,如
sudo apt-get install python-pandas
zypper in python-pandas
2.如何使用Python的Pandas库绘制折线图
01首先我们需要打开Excel软件准备需要的数据,这里多准备几列数据,一列就是一条折线,如下图所示02然后我们打开Pycharm软件,新建Python文件,导入Pandas库,接着将Excel中的数据读取进数据集缓存,如下图所示03接下来我们利用plot方法绘制折线图,如下图所示,这里只添加了一列标题04运行文件以后我们就可以看到折线图显示出来了,但是比较的简单,下面我们逐渐的丰富它05然后在plot方法中将excel里面的多列标题都添加进来,如下图所示06这次在运行文件的时候我们就可以看到折线图上有多条线了,如下图所示07接下来我们在为折线图设置标题,X,Y坐标轴的内容,如下图所示08然后通过plot方法下面的area方法对折线图的空白区域进行叠加填充,如下图所示09最后我们运行完善好后的文件,就可以看到如下图所示的折线图了,到此我们的折线图绘制也就完成了End。
3.如何使用Python绘制饼图
01首先我们需要在Excel文件中准备好饼图的数据,如下图所示02接下来我们打开Pycharm,新建Python文件,导入Python的pandas库,利用pandas将Excel数据加载到缓存中,如下图所示03然后我们在导入pyplot库,运用pyplot库的pie进行饼图的绘制,如下图所示04接着运行程序以后我们就可以看到一张如下图所示的饼图了,但是四周的名称和Excel中的还是不太一样,接下来修改四周的名称05我们在运用pandas库加载Excel数据文件的时候加上index_col属性即可,如下图所示06这次在运行程序我们就可以看到饼图四周的名称和Excel中的一样了,如下图所示07接着我们在运用pyplot中的title和ylable设置饼图的标题和Y坐标轴的名称,如下图所示08最后运行文件就可以看到下面这个信息比较齐全的饼图了,如下图所示,到这里用Python绘制饼图就结束了End。
4.用Python 做策略回测,耗时很长,有什么加速办法
1. 在动手优化之前,先profile看看,程序时间都花在哪些地方了:
python -m cProfile -o output.prof your_program
跑完之后,会生成一个output.profile文件。接下来需要对这个文件进行分析,这方面的工具我推荐SnakeViz,神器。安装非常简单,pip install snakeviz 即可。
snakeviz output.prof
运行之后,会打开一个浏览器窗口,好好看看,哪些函数耗时最多,耗时是因为调用次数太多呢,还是因为单次调用耗时长,明确优化重点;
2. 减少重复计算,缓存计算结果。看看 functools.lru_cache。
3. 能用list comprehension的地方,不要用for;能用numpy的地方,不要手写循环,不要用pandas;
4. 看你的回测,40w个tick的话,数据量不算大,应该是直接load到内存里的吧?
5. 还是慢的话,上Numba — Numba,就是安装麻烦一些,使用起来非常方便,速度提高一两个数量级没问题;
6. 如果你用的包PyPy都支持的话,试试pypy;
7. Cython、c module,上面的都没效果的话,这个是最后的候选方案了。
5.python循环分类问题,一个数可以同时分为好几类,如何减少计算量
每个元素肯定要遍历一遍的, 这个没办法。
数据量不大的话(几千个),就简单的用python的for遍历就好了, 但数据量大的话,就要想着换个方式来处理, 比如用pandas来处理数据,当然用pandas也不能用for这种遍历了, 因为python的性能问题。 最好用pandas提供的方法来处理。
因为不知道你有没有用过pandas, 所以具体的代码也就不贴出来了。虽然pandas内部是用C语言弄的, 所以用它提供的函数来处理的速度会非常快。
6.python pandas 怎样高效地添加一行数据
所以一般说来dataframe就是a set of columns, each column is an array of values. In pandas, the array is one way or another a (maybe variant of) numpy ndarray. 而ndarray本身不存在一种in place append的操作。。。因为它实际上是一段连续内存。。。任何需要改变ndarray长度的操作都涉及分配一段长度合适的新的内存,然后copy。。。这是这类操作慢的原因。。。如果pandas dataframe没有用其他设计减少copy的话,我相信Bren说的"That's probably as efficient as any"是很对的。
所以in general, 正如Bren说的。。。Pandas/numpy structures are fundamentally not suited for efficiently growing.
Matti 和 arynaq说的是两种常见的对付这个问题的方法。。。我想Matti实际的意思是把要加的rows收集成起来然后concatenate, 这样只copy一次。arynaq的方法就是预先分配内存比较好理解。
如果你真的需要incrementally build a dataframe的话,估计你需要实际测试一下两种方法。
我的建议是,如有可能,尽力避免incrementally build a dataframe, 比如用其他data structure 收集齐所有data然后转变成dataframe做分析
7.看到几个给 python 做加速的方案
python 性能加速的方法:
选择一个正确的数据结构。
这个说法深有体会。Python中多变的数据结构可以造成很大的差异,使用一个set就可以事半功倍。甚至一个自己定义的数据结构,对于内存,运算速度,处理方式等都有很大的影响。
进行排序
我在项目中也遇到过,几百万的数据URL需要进行鉴别,哪些数据抓取了哪些没有,抓取的部分还有重复。使用if x in y这种格式,则需要o(m*n)的时间复杂度。而两边都对URL进行排序后,则可以使用两个指针轻松搞定。
字符串组合
编写大字符串的时候,不建议使用加号拼接字符串。使用join,%s(py3中使用format方法)等官方的方法效果更好。
循环的使用
如果使用for循环进行简单而大量的操作,不妨试试map()函数,或者python2.0中就已经有的list方法直接生成。或者使用迭代器进行循环的操作。
避免使用点方法
如上,需要使用list.append()方法的时候,这些方法都是需要在每次调用的时候重新确定(原文reevaluated)的,所以可以提前代替,如re.compile()方法。
使用局部变量
可以将一些代码函数化,从而将变量转为局部变量,Python获取局部变量比使用全局变量要快得多。
初始化字典元素
字典的当前使用新技巧包括:使用keyError来定位没有的key,使用get()方法来返回键对应的值。字典中还有collections模块中较多的:defaultdict,OrderedDict类等。
首先在头部写明 import 声明
大量的import会影响Python的性能。虽然随处可以import, 但最好在代码的头部集中写明。
数据的聚合
一次将多个数据聚合起来传递给函数比多次调用函数的开销要小得多。
减少执行语句的数量
Python中有一个定期检查线程是否该运行的函数。这个函数的大量调用会影响性能。最好我们可以设置这个值为较大的数,或者使用少的执行语句而以空间换时间。
Python不是C
移位不一定比加法快。Python是一个高级语言,调用底层不一定快。
使用profile来分析函数的性能
转载请注明出处代码入门网 » pythonforpandas