如何在Python Pandas中实现SQL Row_number?

时间:2018-12-24 12:32:29

标签: python sql pandas

我正在尝试使用SQL中可用的SQL“ Row_number over”函数对数据框记录进行编号,但是会导致错误,如图所示。请注意,我不希望使用Pandas功能为记录编号。

这是代码

df1.head()

df1.head语句的输出

date    beef    veal    pork    lamb_and_mutton broilers    other_chicken   turkey
0   1944-01-01 00:00:00.000000  751.0   85.0    1280.0  89.0    NaN NaN NaN
1   1944-02-01 00:00:00.000000  713.0   77.0    1169.0  72.0    NaN NaN NaN
2   1944-03-01 00:00:00.000000  741.0   90.0    1128.0  75.0    NaN NaN NaN
3   1944-04-01 00:00:00.000000  650.0   89.0    978.0   66.0    NaN NaN NaN
4   1944-05-01 00:00:00.000000  681.0   106.0   1029.0  78.0    NaN NaN NaN

p = """SELECT 
  ROW_NUMBER() OVER(ORDER BY date ASC) AS Row#,
  beef,veal
FROM df1"""

df1 = pysqldf(p)

一旦执行此语句,它将引发错误

此代码来自Python 3版本。普通的SQL查询可以正常工作,但Python似乎不支持该row_number函数。你能帮我吗?我收到操作错误

2 个答案:

答案 0 :(得分:2)

问题非常简单,您可能已经发现了。 #破坏了整个内容,因为这是无法识别的令牌。

如果您忽略了这些内容,则您的代码应该可以使用。

from pandasql import sqldf

q1='select beef, veal, ROW_NUMBER() OVER (ORDER BY date ASC) as RN FROM df1'

df_new=sqldf(q1)

另外,将标头命名为不同于基本语法的一种好习惯。日期和行可以是SQL中的函数,因此,最好将行列用“ RN”,日期用“ date_”或“ date_of_purchase”。

答案 1 :(得分:0)

您可以使用两行代码在熊猫中实现相同的功能:

  1. 按日期对数据框进行排序

    >>>df1.sort_values(by='date')
    
  2. 添加一个名为“行#”的附加列

    >>>df1["Row#"]=range(1,len(df1["date"])+1)
    
相关问题