不常见的Pandas小窍门:我打赌一定有你不知道的

全文共2501字 , 预计学习时长7分钟
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
图源:unsplash
作为一名数据分析师或数据科学家 , 不了解Python中的Pandas库是无论如何说不过去的 , 它已经成为Python中用来整理、清理数据的标准工具了 。
然而 , 关于Pandas , 你确定自己完全掌握了嘛?本文将分享一些少见但有用的Pandas技巧 , 它们能提升工作效率 , 让生活更轻松 。
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
用剪贴板创建数据框众所周知 , Pandas可以使用SQLAlchemy从CSV、JSON甚至直接从数据库轻松读取数据 , 但你知道Pandas还可以从所用操作系统的剪贴板读取数据吗?假设有一个包含多个数据表的Excel文件 。 现在 , 需要在Python中处理其中一个表的部分数据 。 你通常会怎么做?
· 从数据表中复制需要在Python中处理的数据 。
· 将其粘贴到另一个数据表中 。
· 将当前工作表保存到CSV文件中 。
· 获取新CSV文件的路径 。
· 在Python中 , 使用pd.read_csv('path/to/csv/file')将文件读入一个Pandas数据框架 。
当然 , 其实有种更简单的方法——pd.read_clipboard() 。
· 复制所需数据区域
· 在Python中 , 使用pd.read_clipboard()
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
如上所示 , 如果只是想要将一些数据加载到Pandas中 , 那么无需CSV或Excel的分离文件 。
在该函数中还有一些小窍门 。 例如 , 当遇到带有日期格式的数据时 , 可能无法正确加载 , 如下所示:
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
诀窍就是 , 为Pandas注明哪一列是需要解析的日期格式 。
df = pd.read_clipboard(parse_dates=['dob'])
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
使用测试方法生成虚拟数据有时可能需要生成一些样本数据帧 , 最常见的方法应该是使用NumPy生成一个具有随机值的数组 , 然后从该数组生成数据帧 。
如果数据需要具有一定的分布 , 比如正态分布 , 就必须使用这种方法 。 但是 , 大多数情况下 , 数据是否呈正态分布并不重要 , 只要有数据就好 。 在这种情况下 , 有一种更简单的方法 , 即使用pandas.util.testing测试包生成样本数据帧 。
pd.util.testing.makeDataFrame()数据帧的索引将使用随机字符串生成 , 默认情况下将有4列30行 。
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
如果需要数量相当的行和列 , 可以将testing.N定义为行数 , 并将testing.K定义为列数 。
pd.util.testing.N = 10pd.util.testing.K = 5pd.util.testing.makeDataFrame()
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
将数据帧输出至压缩文件
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
图源:unsplash
数据帧可以轻松输出至文件 , 例如以df.to_csv()、df.to_json()等形式 。 但有时 , 为节省磁盘空间或另作它用 , 需要压缩文件 。 例如 , 作为一名数据工程师 , 为了将Pandas数据帧输出到CSV文件中 , 并将其传输到远程服务器 , 在发送前需要压缩文件以节省空间和带宽 。
通常 , 一贯的解决方案是在所用调度工具(如Airflow或Oozie)中多操作一步 , 但Pandas可以直接输出压缩文件 。 所以 , 解决方案几步就可完成 , 更加简洁明了 。
先使用第二个小窍门生成随机数据帧吧:
pd.util.testing.N = 100000pd.util.testing.K = 5df = pd.util.testing.makeDataFrame()
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
在该例子中 , 仅需要一个数据框架 , 其中的值可完全不计 。 现在 , 将数据帧保存到一个CSV文件中 , 并检查其大小 。
import osdf.to_csv('sample.csv')os.path.getsize('sample.csv')
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图
然后 , 可以试试将相同的数据帧输出到压缩文件中 , 并检查文件的大小 。
df.to_csv('sample.csv.gz', compression='gzip')os.path.getsize('sample.csv.gz')
不常见的Pandas小窍门:我打赌一定有你不知道的文章插图