猿问

如何在 Python Pandas 中实现 SQL Row_number?

我正在尝试使用 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 函数。你能帮我解决这个问题吗?我收到一个操作错误


梵蒂冈之花
浏览 406回答 2
2回答

宝慕林4294392

问题很简单,你可能已经想通了。# 打破了整个事情,因为这是一个无法识别的标记。如果您忽略这一点,您的代码应该可以工作。from pandasql import sqldfq1='select beef, veal, ROW_NUMBER() OVER (ORDER BY date ASC) as RN FROM df1'df_new=sqldf(q1)此外,将标头命名为与基本语法不同的名称也是一个好习惯。日期和行可以是 SQL 中的函数,因此您最好使用 'RN' 表示行列,使用 'date_' 或 'date_of_purchase' 表示日期。

12345678_0001

您可以使用以下两行代码在 Pandas 中实现相同的功能:按日期对数据框进行排序>>>df1.sort_values(by='date')添加名为“Row#”的附加列>>>df1["Row#"]=range(1,len(df1["date"])+1)
随时随地看视频慕课网APP

相关分类

Python
我要回答