不常见的Pandas小窍门:我打赌一定有你不知道的( 二 )
数据帧可以轻松输出至文件 , 例如以df.to_csv()、df.to_json()等形式 。 但有时 , 为节省磁盘空间或另作它用 , 需要压缩文件 。 例如 , 作为一名数据工程师 , 为了将Pandas数据帧输出到CSV文件中 , 并将其传输到远程服务器 , 在发送前需要压缩文件以节省空间和带宽 。
通常 , 一贯的解决方案是在所用调度工具(如Airflow或Oozie)中多操作一步 , 但Pandas可以直接输出压缩文件 。 所以 , 解决方案几步就可完成 , 更加简洁明了 。
先使用第二个小窍门生成随机数据帧吧:
pd.util.testing.N = 100000pd.util.testing.K = 5df = pd.util.testing.makeDataFrame()
文章插图
在该例子中 , 仅需要一个数据框架 , 其中的值可完全不计 。 现在 , 将数据帧保存到一个CSV文件中 , 并检查其大小 。
import osdf.to_csv('sample.csv')os.path.getsize('sample.csv')
文章插图
然后 , 可以试试将相同的数据帧输出到压缩文件中 , 并检查文件的大小 。
df.to_csv('sample.csv.gz', compression='gzip')os.path.getsize('sample.csv.gz')
文章插图
可以看到 , 压缩文件小于正常CSV文件的一半 。
这可能不是一个好例子 , 因为该随机数据帧中没有任何重复值 。 在实践中 , 如果存在分类值 , 压缩率会非常高!顺便一提 , 如你所想 , Pandas可以直接将压缩文件读入数据帧 , 无须在文件系统中解压它 。
df = pd.read_csv('sample.csv.gz', compression='gzip', index_col=0)
文章插图
gzip是优先选择 , 因为它默认存在于大多数Linux系统中 。 Pandas还支持其它压缩格式 , 比如“zip”和“bz2” 。
文章插图
多列获取DateTime(时间日期)
文章插图
图源:unsplash
在Pandas中 , 你一定用过pd.to_datetime()方法将某种字符串转换为DateTime格式 , 这通常用于处理诸如%Y%m%d的格式字符串 。 然而 , 也有时可能会使用下方所示的数据框架作为原始数据 。
df = pd.DataFrame({'year': np.arange(2000, 2012),'month': np.arange(1, 13),'day': np.arange(1, 13),'value': np.random.randn(12)})
文章插图
在数据框架中 , 将年、月、日作为单独列分隔开来屡见不鲜 , 可以使用pd.to_dateframe()将其一步转换为DateTime列 。
df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
文章插图
本文分享了一些关于Pandas Python库的省时小窍门 。 简而言之 , 人生苦短 , Python值得 。
文章插图
留言点赞关注
我们一起分享AI学习与发展的干货
如转载 , 请后台留言 , 遵守转载规范
