游龙战神|PandaSQL:通过SQL语句进行pandas的操作的包
Pandas是近年来最好的数据操作库之一 。 它允许切片、分组、连接和执行任意数据转换 。 如果你熟练的使用SQL,那么这篇文章将介绍一种更直接、简单的使用Pandas处理大多数数据操作案例 。
假设你对SQL非常的熟悉 , 或者你想有更可读的代码 。 或者您只是想在dataframe上运行一个特殊的SQL查询 。 或者 , 也许你来自R , 想要一个sqldf的替代品 。
这篇文章将介绍一种在pandas的dataframe中使用SQL的python包 , 并且使用一个不等链接的查询操作来介绍PandasSQL的使用方法 。
不等连接(Non-equi join)假设你必须连接两个dataframe 。 其中一个显示了我们对某些商品进行促销的时间段 。 第二个是事务Dataframe 。 我想知道促销活动推动的销售情况 , 也就是促销期间的销售情况 。
我们可以通过联接项目列以及联接条件(TransactionDt≥StartDt和TransactionDt≤EndDt)来实现这一点 。 因为现在我们的连接条件也有大于号和小于号 , 这样的连接称为不等连接 。 在继续之前 , 一定要考虑如何在pandas中做这样的事情 。
pandas的解决方案那么在pandas身上该怎么做呢?pandas肯定可以解决这个问题 , 尽管我认为它的可读性不够 。
让我们从生成一些要处理的随机数据开始 。
import pandas as pdimport randomimport datetimedef random_dt_bw(start_date,end_date):days_between = (end_date - start_date).daysrandom_num_days = random.randrange(days_between)random_dt = start_date + datetime.timedelta(days=random_num_days)return random_dtdef generate_data(n=1000):items = [f"i_{x}" for x in range(n)]start_dates = [random_dt_bw(datetime.date(2020,1,1),datetime.date(2020,9,1)) for x in range(n)]end_dates = [x + datetime.timedelta(days=random.randint(1,10)) for x in start_dates]offerDf = pd.DataFrame({"Item":items,"StartDt":start_dates,"EndDt":end_dates})transaction_items = [f"i_{random.randint(0,n)}" for x in range(5*n)]transaction_dt = [random_dt_bw(datetime.date(2020,1,1),datetime.date(2020,9,1)) for x in range(5*n)]sales_amt = [random.randint(0,1000) for x in range(5*n)]transactionDf = pd.DataFrame({"Item":transaction_items,"TransactionDt":transaction_dt,"Sales":sales_amt})return offerDf,transactionDf您不需要担心上面的随机数据生成代码 。 只要知道我们的随机数据是什么样子就可以了:
offerDf,transactionDf = generate_data(n=100000)一旦我们有了数据 , 我们就可以通过合并列项上的数据来进行不等连接 , 然后根据所需条件进行过滤 。
merged_df = pd.merge(offerDf,transactionDf,on='Item')pandas_solution = merged_df[(merged_df['TransactionDt']>=merged_df['StartDt'])"""pandaSQL_solution = pysqldf(q)结果是一个我们所期望的panda Dataframe 。 索引已经自动为我们重置了 , 不像以前那样需要手动操作 。
推荐阅读
- 游龙战神|2020年中国搜索引擎行业市场现状及发展前景分析
- 游龙战神|将轻松跑800-1000km?特斯拉表示:我就没怕过谁
- 手游葱花酱|《王者荣耀》:战神解除封印,重塑宫本一刀万血?
- 战神游戏office|新游往往最暴利,《新神魔大陆》攻略
- 洪都烟客|中国历史上的战将奇迹!,春秋战国之战神白起:乱世最杰出之将领
- 铲史人|清朝第一代“战神”,连“年羹尧”都惧他三分,他是三朝武将
- 游龙战神|不过时的“真机皇”——华为mate20Pro
- 游龙战神|中国成为世界芯片最大进口国,这是好事吗?专家:不一定是好事
- 超级游戏助手|“吃鸡”第三面板到底好在哪?不求人也苦练第三面板,已成战神标配
- 王者荣耀|王者荣耀:只因一个小调整,“对抗路战神”横空出世,铠皇真的危险了
