pandas 如何把时间转成index_不容错过的 Pandas 小技巧:万能转格式、轻松合并、压缩数据,让数据分析更高效...

击上方“深度学习专栏”,选择“星标”公众号

重磅干货,第一时间送达65f38632fe42a257514f54bd4c701492.png

作者 | Roman Orac

转自 | 量子位    编译 | 鱼羊

数据分析,如何能错过  Pandas 。现在,数据科学家 Roman Orac 分享了他在工作中相见恨晚的 Pandas 使用技巧。了解了这些技巧,能让你在学习、使用 Pandas 的时候更加高效。 b9dfaff7230dd02996f4b58ccb0d8720.png话不多说,一起学习一下~

   Pandas实用技巧

用 Pandas 做数据分析,最大的亮点当属 DataFrame。不过,在展示成果的时候,常常需要把 DataFrame 转成另一种格式。Pandas 在这一点上其实十分友好,只需添加一行代码。 DataFrame 转 HTML如果你需要用 HTML 发送自动报告,那么  to_html 函数了解一下。比如,我们先设定这样一个 DataFrame:
import numpy as npimport pandas as pdimport random
n = 10
df = pd.DataFrame(
    {"col1": np.random.random_sample(n),"col2": np.random.random_sample(n),"col3": [[random.randint(0, 10) for _ in range(random.randint(3, 5))] for _ in range(n)],
    }
)
用上 to_html,就可以将表格转入 html 文件:
df_html = df.to_html()with open(‘analysis.html’, ‘w’) as f: f.write(df_html)
e756c6789b5d115808949a628433ed78.png与之配套的,是  read_html 函数,可以将 HTML 转回 DataFrame。 DataFrame 转 LaTeX如果你还没用过 LaTeX 写论文,强烈建议尝试一下。要把 DataFrame 值转成 LaTeX 表格,也是一个函数就搞定了:
df.to_latex()
1bbcdafffb10b0fc73355e4e45ff4beb.png DataFrame 转 Markdown如果你想把代码放到 GitHub 上,需要写个 README。这时候,你可能需要把 DataFrame 转成 Markdown 格式。Pandas 同样为你考虑到了这一点:
print(df.to_markdown())
75db9dcb6d0f710c3299f3b26c99c976.png 注:这里还需要 tabulate 库 DataFrame 转 Excel说到这里,给同学们提一个小问题:导师/老板/客户要你提供 Excel 格式的数据,你该怎么做?当然是——
df.to_excel(‘analysis.xlsx’)
需要注意的是,如果你没有安装过  xlwt 和  openpyxl 这两个工具包,需要先安装一下。另外,跟 HTML 一样,这里也有一个配套函数: read_excel,用来将excel数据导入pandas DataFrame。 DataFrame 转字符串转成字符串,当然也没问题:
df.to_string()

   5个鲜为人知的Pandas技巧

此前,Roman Orac 还曾分享过 5 个他觉得十分好用,但大家可能没有那么熟悉的 Pandas 技巧。 1、data_range从外部 API 或数据库获取数据时,需要多次指定时间范围。Pandas 的 data_range 覆盖了这一需求。
import pandas as pd
date_from = “2019-01-01”
date_to = “2019-01-12”
date_range = pd.date_range(date_from, date_to, freq=”D”)
print(date_range)
freq = “D”/“M”/“Y”,该函数就会分别返回按天、月、年递增的日期。 26446d5f99c1a1d777d4531ecfa2aa88.png 2、合并数据当你有一个名为left的DataFrame: 9f030850f73dd19aa75da29e163cfd6d.png和名为right的DataFrame: 43a97295a74dccbd35a10376a87573bb.png想通过关键字“key”把它们整合到一起: 272d2572775ea06d4971e9c988c46769.png实现的代码是:
df_merge = left.merge(right, on = ‘key’, how = ‘left’, indicator = True)
3、最近合并(Nearest merge)在处理股票或者加密货币这样的财务数据时,价格会随着实际交易变化。针对这样的数据,Pandas提供了一个好用的功能, merge_asof。该功能可以通过最近的key(比如时间戳)合并DataFrame。举个例子,你有一个存储报价信息的DataFrame。 edae5ec327e2995bba7735417b5fd05a.png还有一个存储交易信息的DataFrame。 a2597a0ae55a08aaf0361a6cfd1e57c7.png现在,你需要把两个DataFrame中对应的信息合并起来。最新报价和交易之间可能有10毫秒的延迟,或者没有报价,在进行合并时,就可以用上 merge_asof。
pd.merge_asof(trades, quotes, on=”timestamp”, by=’ticker’, tolerance=pd.Timedelta(‘10ms’), direction=‘backward’)
417d1e72bd39466d9211f349fb5b1d5e.png 4、创建Excel报告在Pandas中,可以直接用DataFrame创建Excel报告。
import numpy as npimport pandas as pd
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=["a", "b", "c"])
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)
不只是数据,还可以添加图表。
# define the workbook
workbook = writer.book
worksheet = writer.sheets[sheet_name]# create a chart line object
chart = workbook.add_chart({ type :  line })# configure the 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()
注:这里需要 XlsxWriter 库 f792aedd05ee4ffa158c162989d97880.png 5、节省磁盘空间 Pandas在保存数据集时,可以对其进行压缩,其后以压缩格式进行读取。先搞一个 300MB 的 DataFrame,把它存成 csv。
df = pd.DataFrame(pd.np.random.randn(50000,300))
df.to_csv(‘random_data.csv’, index=False)
压缩一下试试:
df.to_csv(‘random_data.gz’, compression=’gzip’, index=False)
文件就变成了136MB。 a215d21b08ee9548f290b2fca7f8bc4c.pnggzip压缩文件可以直接读取:
df = pd.read_csv(‘random_data.gz’)
这一份Pandas技巧笔记,暂且说到这里。各位同学都做好笔记了吗?Talk is cheap, show me the code。学会了,就用起来吧 3af3f93138caed43f2ada11fdf2d9428.png

e79c0822a774c6f0fe3942206e0fe0ed.png

扫码关注,成为爱码士

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值