赞
踩
- import numpy as np
- import matplotlib.pyplot as plt
- import pandas as pd
- import seaborn as sns
- import statsmodels as sm
使用Tab键可以提示补全任何对象和模块的方法和属性。
除了补全命名、对象和模块属性,Tab还可以补全其它的。当输入看似文件路径时(即使是Python字符串),按下Tab也可以补全电脑上对应的文件信息:
- In [7]: datasets/movielens/<Tab>
- datasets/movielens/movies.dat datasets/movielens/README
- datasets/movielens/ratings.dat datasets/movielens/users.dat
- In [7]: path = 'datasets/movielens/<Tab>
- datasets/movielens/movies.dat datasets/movielens/README
- datasets/movielens/ratings.dat datasets/movielens/users.dat
在变量前后使用问号?,可以显示对象的信息(和help类似):
也可以对函数使用:
?还有一个用途,就是像Unix或Windows命令行一样搜索IPython的命名空间。字符与通配符结合可以匹配所有的名字。例如,我们可以获得所有包含load的顶级NumPy命名空间:
- In [13]: np.*load*?
- np.__loader__
- np.load
- np.loads
- np.loadtxt
- np.pkgload
在python中可以使用%run命令来运行python程序。假设有一个文件ipython_script_test.py
:
- def f(x, y, z):
- return (x + y) / z
- a = 5
- b = 6
- c = 7.5
- result = f(a, b, c)
可以如下运行:
%run ipython_script_test.py
这段脚本运行在空的命名空间(没有import和其它定义的变量),因此结果和普通的运行方式python script.py
相同。文件中所有定义的变量(import、函数和全局变量,除非抛出异常),都可以在IPython shell中随后访问:
- In [15]: c
- Out [15]: 7.5
- In [16]: result
- Out[16]: 1.4666666666666666
在Jupyter notebook中,你也可以使用%load
,它将脚本导入到一个代码格中:
- >>> %load ipython_script_test.py
- def f(x, y, z):
- return (x + y) / z
- a = 5
- b = 6
- c = 7.5
- result = f(a, b, c)
IPython中特殊的命令(Python中没有)被称作“魔术”命令。这些命令可以使普通任务更便捷,更容易控制IPython系统。魔术命令是在指令前添加百分号%前缀。例如,可以用%timeit
测量任何Python语句,例如矩阵乘法,的执行时间:
- In [20]: a = np.random.randn(100, 100)
- In [20]: %timeit np.dot(a, a)
- 10000 loops, best of 3: 20.9 µs per loop
比较实用的是%%time,可以测量单元格运行的时间:
- %%time
- a = np.random.randn(100,100)
输出:
CPU times: total: 15.6 ms Wall time: 27 ms
当在Python中创建变量(或名字),你就在等号右边创建了一个对这个变量的引用。考虑一个整数列表,假设将a赋值给一个新变量b,在有些方法中,这个赋值会将数据[1, 2, 3]也复制。在Python中,a和b实际上是同一个对象,即原有列表[1, 2, 3]。你可以在a中添加一个元素,然后检查b:
- In [8]: a = [1, 2, 3]
- In [9]: b = a
- In [10]: a.append(4)
- In [11]: b
- Out[11]: [1, 2, 3, 4]
Python中的大多数对象,比如列表、字典、NumPy数组,和用户定义的类型(类),都是可变的,意味着这些对象或包含的值可以被修改。其它的,例如字符串和元组,是不可变的:
- In [43]: a_list = ['foo', 2, [4, 5]]
- In [44]: a_list[2] = (3, 4)
- In [45]: a_list
- Out[45]: ['foo', 2, (3, 4)]
-
- In [46]: a_tuple = (3, 5, (4, 5))
- In [47]: a_tuple[1] = 'four'
- ---------------------------------------------------------------------------
- TypeError Traceback (most recent call last)
- <ipython-input-47-b7966a9ae0f1> in <module>()
- ----> 1 a_tuple[1] = 'four'
- TypeError: 'tuple' object does not support item assignment
对于有换行符的字符串,可以使用三引号,’ ’ ’或 ” ” ”都行:
- c = """
- This is a longer string that
- spans multiple lines
- """
字符串c
实际包含四行文本,”””后面和lines后面的换行符。可以用count
方法计算c
中的新的行:
- In [55]: c.count('\n')
- Out[55]: 3
字符串是一个序列的Unicode字符,因此可以像其它序列,比如列表和元组一样处理:
- In [64]: s = 'python'
- In [65]: list(s)
- Out[65]: ['p', 'y', 't', 'h', 'o', 'n']
- In [66]: s[:3]
- Out[66]: 'pyt'
- In [67]: s = '12\\34'
- In [68]: print(s)
- 12\34
如果字符串中包含许多反斜杠,但没有特殊字符,这样做就很麻烦。幸好,可以在字符串前面加一个r,表明字符就是它自身:
- In [69]: s = r'this\has\no\special\characters'
- In [70]: s
- Out[70]: 'this\\has\\no\\special\\characters'
字符串对象有format
方法,可以替换格式化的参数为字符串,产生一个新的字符串:
In [74]: template = '{0:.2f} {1:s} are worth US${2:d}'
要替换参数为这些格式化的参数,我们传递format
方法一个序列:
- In [75]: template.format(4.5560, 'Argentine Pesos', 1)
- Out[75]: '4.56 Argentine Pesos are worth US$1'
Python内建的datetime
模块提供了datetime
、date
和time
类型。datetime
类型结合了date
和time
,是最常使用的:
- In [102]: from datetime import datetime, date, time
- In [103]: dt = datetime(2011, 10, 29, 20, 30, 21)
- In [104]: dt.day
- Out[104]: 29
- In [105]: dt.minute
- Out[105]: 30
根据datetime
实例,你可以用date
和time
提取出各自的对象:
- In [106]: dt.date()
- Out[106]: datetime.date(2011, 10, 29)
- In [107]: dt.time()
- Out[107]: datetime.time(20, 30, 21)
strftime
方法可以将datetime格式化为字符串:
- In [108]: dt.strftime('%m/%d/%Y %H:%M')
- Out[108]: '10/29/2011 20:30'
strptime
可以将字符串转换成datetime
对象:
- In [109]: datetime.strptime('20091031', '%Y%m%d')
- Out[109]: datetime.datetime(2009, 10, 31, 0, 0)
当你聚类或对时间序列进行分组,替换datetimes的time字段有时会很有用。例如,用0替换分和秒:
- In [110]: dt.replace(minute=0, second=0)
- Out[110]: datetime.datetime(2011, 10, 29, 20, 0)
因为datetime.datetime
是不可变类型,上面的方法会产生新的对象。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。