全文共2801字,预计学习时长12分钟数据库
Pandas为Python营造了一个高水平的操做环境,还提供了便于操做的数据结构和分析工具编程
无需更多介绍,Pandas已是Python中数据分析的经常使用工具了。做为一个数据科学家,Pandas是我平常使用的工具,我总会惊叹于它强大的功能。本篇文章将会讲解5个我最近学到的,而且极大提高了工做效率的Pandas技巧。数组
对于pandas新手而言,Pandas为Python编程语言营造了一个高水平的操做环境,还提供了便于操做的数据结构和分析工具。Pandas这个名字是由“面板数据”(panel data)衍生而来,这是一个计量经济学中的术语,它是一个数据集,由同一个个体在多个时间段内所观察的结果组成。微信
1. 数据范围数据结构
从外部应用程序接口(API)或者数据库中抓取数据的时候,一般须要肯定一个数据范围。Pandas能够很好地解决这一问题,它的data_range函数可以产出按日、月、年等方式递增的日期。框架
假设如今须要一组按天数递增的数据范围。dom
date_from ="2019-01-01"编程语言
date_to = "2019-01-12"函数
date_range = pd.date_range(date_from, date_to, freq="D")工具
date_range
把产出的date_range转化为开始和结束日期,这一步能够用后续函数(subsequentfunction)完成。
for i, (date_from, date_to) inenumerate(zip(date_range[:-1], date_range[1:]), 1):
date_from = date_from.date().isoformat()
date_to = date_to.date().isoformat()
print("%d. date_from: %s,date_to: %s" % (i, date_from, date_to))1. date_from: 2019-01-01,date_to: 2019-01-02
2. date_from: 2019-01-02, date_to: 2019-01-03
3. date_from: 2019-01-03, date_to: 2019-01-04
4. date_from: 2019-01-04, date_to: 2019-01-05
5. date_from: 2019-01-05, date_to: 2019-01-06
6. date_from: 2019-01-06, date_to: 2019-01-07
7. date_from: 2019-01-07, date_to: 2019-01-08
8. date_from: 2019-01-08, date_to: 2019-01-09
9. date_from: 2019-01-09, date_to: 2019-01-10
10. date_from: 2019-01-10, date_to: 2019-01-11
11. date_from: 2019-01-11, date_to: 2019-01-12
2. 使用指示符合并
合并两个数据集就是将它们变成一个数据集的过程,这须要根据它们的公共属性或栏来对齐其中的每一行。
合并函数中有许多arguments(对应于传递给函数的参数的类数组对象),其中指示符(indicator)argument可主要应用到合并过程当中,它在左、右或者两边的数据帧(DataFrame)函数添加_merge栏,这一栏就显示了“数据行是哪里来的”。用_merge栏来处理更大的数据集会很是有用,尤为是须要检查合并操做的正确率时。
left = pd.DataFrame({"key":["key1", "key2", "key3", "key4"],"value_l": [1, 2, 3, 4]})
right = pd.DataFrame({"key":["key3", "key2", "key1", "key6"],"value_r": [3, 2, 1, 6]})
df_merge = left.merge(right,on='key', how='left',indicator=True)
_merge栏能够用来检查是否获得了咱们预期的行数,并且它反映的是来自两个数据框架的预期值。
df_merge._merge.value_counts()both 3
left_only 1
right_only 0
Name: _merge, dtype: int64
3. 最近合并(Nearest merge)
在处理像股票或者加密货币一类的金融数据时,还须要把报价(价格变化)与实际交易结合。如今,假设目的是但愿将每笔交易与以前几毫秒产生的报价合并起来。Pandas有一个merge_asof函数,它可以经过最近的key(本文中指时间戳)来合并数据框架。有关报价和交易的数据集能够从pandas实例中得到。
报价数据框架包含了不一样股票的价格变化。一般状况下,报价要比交易多得多。
quotes = pd.DataFrame(
[
["2016-05-2513:30:00.023", "GOOG", 720.50, 720.93],
["2016-05-2513:30:00.023", "MSFT", 51.95, 51.96],
["2016-05-2513:30:00.030", "MSFT", 51.97, 51.98],
["2016-05-2513:30:00.041", "MSFT", 51.99, 52.00],
["2016-05-2513:30:00.048", "GOOG", 720.50, 720.93],
["2016-05-2513:30:00.049", "AAPL", 97.99, 98.01],
["2016-05-2513:30:00.072", "GOOG", 720.50, 720.88],
["2016-05-2513:30:00.075", "MSFT", 52.01, 52.03],
],
columns=["timestamp","ticker", "bid", "ask"],
)
quotes['timestamp'] = pd.to_datetime(quotes['timestamp'])
交易数据框架包含了不一样股票的交易信息。
trades = pd.DataFrame(
[
["2016-05-2513:30:00.023", "MSFT", 51.95, 75],
["2016-05-2513:30:00.038", "MSFT", 51.95, 155],
["2016-05-2513:30:00.048", "GOOG", 720.77, 100],
["2016-05-2513:30:00.048", "GOOG", 720.92, 100],
["2016-05-2513:30:00.048", "AAPL", 98.00, 100],
],
columns=["timestamp","ticker", "price", "quantity"],
)
trades['timestamp'] = pd.to_datetime(trades['timestamp'])
经过股价报告(tickers)能够合并交易和报价信息,报告中报价可能只比交易迟了10毫秒。若是报价的时间差长于10毫秒,或者没有报价,任何出价和询问报价都是无效的(以苹果股价报告*为例)。
*苹果股价报告:AAPL ticker。
pd.merge_asof(trades,quotes, on="timestamp", by='ticker', tolerance=pd.Timedelta('10ms'),direction='backward')
4. 建立Excel报告
Pandas和XlsxWriter库同时使用可以帮助咱们建立基于数据框架的Excel 报告。这能节省不少时间,不用再花时间先把数据框架存为csv格式,而后再导入Excel排版。还能够直接加入各类图表等多种便捷操做。
df = pd.DataFrame(pd.np.array([[1,2, 3], [4, 5, 6], [7, 8, 9]]), columns=["a", "b","c"])
如下的一小段代码就建立了一个Excel报告。要想将一个数据框架存储到Excel文件,须要反注释writer.save()行。
report_name ='example_report.xlsx'
sheet_name = 'Sheet1'writer = pd.ExcelWriter(report_name,engine='xlsxwriter')
df.to_excel(writer, sheet_name=sheet_name, index=False)
# writer.save()
正如前文中提到的那样,这个数据库也支持添加图表到Excel报告中。这须要肯定图表的类型(本文中是线形图表)以及图表所反映的数据序列,注意,这些数据序列应位于Excel的电子表格程序里(spreadsheet)。
# define the workbook
workbook= writer.book
worksheet = writer.sheets[sheet_name]# create a chart lineobject
chart = workbook.add_chart({'type': 'line'})# configurethe series of the chart from the spreadsheet
# using a list of values instead of category/value formulas:
# [sheetname, first_row, first_col,last_row, last_col]
chart.add_series({
'categories': [sheet_name, 1, 0, 3,0],
'values': [sheet_name, 1, 1, 3, 1],
})# configure the chart axes
chart.set_x_axis({'name': 'Index', 'position_axis': 'on_tick'})
chart.set_y_axis({'name': 'Value', 'major_gridlines': {'visible':False}})# place the chart on the worksheet
worksheet.insert_chart('E2', chart)# output the excel file
writer.save()
5. 节省磁盘空间
同时处理几个数据科学项目,结束后一般会有不少从不一样实验中获得的预处理数据集。这样笔记本电脑的固态硬盘很快就会被这些数据塞满。Pandas在保存数据集时发挥做用,压缩数据,读取这些数据时又是解压形式。
不妨建立一个随机数字的大Pandas数据框架。
df = pd.DataFrame(pd.np.random.randn(50000,300))
若是把这个文件存为csv格式,它会占掉硬盘驱动器上300MB的空间。
df.to_csv('random_data.csv',index=False)
经过一个compression=‘gzip’argument,就能够将文件大小缩至136MB。
df.to_csv('random_data.gz',compression='gzip', index=False)
同时,在数据框架上读取gzipped数据也很容易,因此功能上并不会有任何损失。
df = pd.read_csv('random_data.gz')
结语
这些pandas技巧极大的提升了工做效率。但愿这篇文章能帮助到你,经过展现pandas新功能,提升你的工做效率。
你最喜欢哪个pandas技巧呢?
留言 点赞 关注
咱们一块儿分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
(添加小编微信:dxsxbb,加入读者圈,一块儿讨论最新鲜的人工智能科技哦~)