我正在尝试使用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函数。你能帮我吗?我收到操作错误
答案 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)
您可以使用两行代码在熊猫中实现相同的功能:
按日期对数据框进行排序
>>>df1.sort_values(by='date')
添加一个名为“行#”的附加列
>>>df1["Row#"]=range(1,len(df1["date"])+1)