Python爱好者俱乐部
18247
542
[514 楼] Trompette
[泡菜]
24-4-23 21:16
大信 发表于 2024-02-25 01:39 大概率因为文件是老 xls 格式,只是赋予了 xlsx 的新扩展名 |
[513 楼] Trompette
[泡菜]
24-4-23 21:14
duoduobear 发表于 2024-04-22 01:37 多数情况下,都可以无脑用 NVenc 如果是极度追求高画质下尽量高压缩率的发片组,那就用 libx264 CPU软压(要配好参数才能跑出比NVenc更好的画质) |
[512 楼] hzxah1
[泡菜]
24-4-23 19:36
大信 发表于 2020-08-10 12:39 报名,之前做物联网服务器接触了Python,好用. |
[511 楼] benniewang
[资深泡菜]
24-4-22 04:08
大信 发表于 2024-02-25 01:39 另外推荐用polars,并行版的pandas。 benniewang 编辑于 2024-04-22 04:11 |
[510 楼] duoduobear
[Canon论坛版主]
24-4-22 01:37
请教各位:
有Nvidia GPU的情况下,在生成视频时,使用 libx264 和 h264_nvnec 哪个编码器更好? 我发现h264_nvnec似乎明显编码速度更快,它使用NV GPU硬件编码,速度快并不奇怪。但我看到网上也有人说libx264的编码质量会更好。的确如此吗?使用 libx264 和 h264_nvnec 哪个更好? |
[509 楼] 大信
[泡菜]
24-2-25 01:39
最近使用pandas的read_excel()遇到一个告警信息,感觉很奇怪。
程序代码: df_excel = pandas.read_excel('xyz.xlsx',sheet_name='sheet1') 结果遇到一个告警信息: /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/openpyxl/worksheet/_reader.py:329: UserWarning: Unknown extension is not supported and will be removed 大意是:未知的文件后缀,(今后)不再支持? 这是个警告信息,并不影响读取xlsx文件。如果读xls文件,则一切正常也没有告警信息。 我查了一下,xls是Excel 97 至 2003 版本。而xlsx是新的高级版本,有更多更好的功能。 我就奇怪了,为何pandas有这个告警,还预告今后不再支持?为啥不支持更新更好的表格文件,转而支持老旧的表格?pandas不会如此保守、倒退吧? package如下(pandas依赖openpyxl来打开xlsx文件): openpyxl 3.1.2 pandas 2.2.0 实在不明就里,在此请教。谢谢! 大信 编辑于 2024-02-25 01:41 |
[508 楼] lhy02
[泡菜]
24-1-9 18:30
大信 发表于 2024-01-08 19:55 ![]() 把np.NaN改成None也行。 lhy02 编辑于 2024-01-09 18:37 |
[507 楼] 闲聊状态
[泡菜]
24-1-9 08:44
大信 发表于 2024-01-08 19:54 ![]() |
[506 楼] ChK
[陈年泡菜]
24-1-8 21:24
大信 发表于 2024-01-08 19:58 数据库内部用前面说的结构,输出时可以转成c1 c2多列的形式 发布自 安卓客户端 |
[505 楼] 大信
[泡菜]
24-1-8 19:58
ChK 发表于 2024-01-08 15:03 对的,这种结构不符合数据库的范式设计。 但在有些情况下确非常好用,那就是在pandas的dataframe中。在进行数据分析的时候非常好用。 |
[504 楼] 大信
[泡菜]
24-1-8 19:55
lhy02 发表于 2024-01-08 15:23 是我题目没有交代清楚。就是本行减去上一行,再除以上一行,得到增长率。 股市不是每天都开门,所以用日期来说不准确。 另外,对于各个股票不定期的停盘,不可能因为停盘就让本行其他股票当天没数据。所以在数据组织的时候,这行用的是上一行的数据。不影响收益率的计算。 |
[503 楼] 大信
[泡菜]
24-1-8 19:54
闲聊状态 发表于 2024-01-08 13:14 对的,是我题目没有交代清楚。就是本行减去上一行,再除以上一行,得到增长率。 股市不是每天都开门,所以用日期来说不准确。 另外,对于各个股票不定期的停盘,不可能因为停盘就让本行其他股票当天没数据。所以在数据组织的时候,这行用的是上一行的数据。不影响收益率的计算。 |
[502 楼] lhy02
[泡菜]
24-1-8 15:23
大信 发表于 2024-01-08 13:07 那就不是简单的下一条记录-上一条记录,得跳过空记录。 ---- 对于停牌,计算方法是什么样的呢?也不一定是跳过空记录,也许是复制上一条记录再计算,搞不清。 lhy02 编辑于 2024-01-08 15:29 |
[501 楼] ChK
[陈年泡菜]
24-1-8 15:07
lhy02 发表于 2024-01-08 14:20 至于大框架和算法,可以和他讨论后再做决定,正如前面说的,他的知识面比任何人都宽,这就足以做一个好帮手了。 |
[500 楼] ChK
[陈年泡菜]
24-1-8 15:03
大信 发表于 2024-01-08 12:59 一般来说,通用的数据库不会设计成C1-C6这样的表结构,因为一旦需要增加或减少股票的种类,修改程序的工作将是灾难性的。 前面闲聊兄给出的表结构才是一般的设计思路,这样的结构在设计是复杂一点,但以后增减股票都不用再改程序。 当然,如果是个人玩票性质,您这么建也没问题,对具体需求来说,这可能是成本最低的实现,数据库逻辑也更简单和高效。 |
[499 楼] lhy02
[泡菜]
24-1-8 14:20
ChK 发表于 2024-01-07 22:34 对于小白,更是灭顶之灾。楼主水平不知,但看他的发言,应该是很容易带沟里去。 百度可能找不到答案,但至少那些搜出来的,本身基本是正确的。这样不至于迷惑人。 |
[498 楼] 闲聊状态
[泡菜]
24-1-8 13:14
大信 发表于 2024-01-08 13:07 df_pct = df_stocks.pctchange() 那对于跳日子的情况,是不是也不是 今天-昨天 了,而是这个减上一个? 闲聊状态 编辑于 2024-01-08 13:18 |
[497 楼] 大信
[泡菜]
24-1-8 13:07
闲聊状态 发表于 2024-01-08 10:12 SQL大神就是牛,一条语句可以搞定。 ![]() ![]() ![]() 不过pandas也很厉害的哦,也是一条语句搞定:df_pct = df_stocks.pctchange() 没别的意思就想表达“条条大路通罗马”,关键是要有个适合自己趁手的“冰器”,这样在奔向罗马的荆棘路上才能抵挡各路山贼。 ![]() |
[496 楼] 大信
[泡菜]
24-1-8 12:59
ChK 发表于 2024-01-07 18:10 对的,C1-C6都是以股票代码或名称命名的字段。 结果也要放在与下图相同结构的一张表中。 ![]() |
[495 楼] 闲聊状态
[泡菜]
24-1-8 10:12
单纯的要求今天-昨天反倒是简单了
![]() |
[494 楼] 闲聊状态
[泡菜]
24-1-8 09:55
闲聊状态 发表于 2024-01-08 09:26 至于跳日期的 我觉得跳了就跳了吧,也不能都空着不是。。。 如果非要严格按照 今天-昨天 来,那也不用使用函数了,直接倆一样的表 进行date=date-1关联,然后直接按公式减除就好了 反正跳日的也是很多null。。 |
[493 楼] 闲聊状态
[泡菜]
24-1-8 09:31
ChK 发表于 2024-01-07 18:07 但是 python 不止是可以做数据分析 ![]() |
[492 楼] 闲聊状态
[泡菜]
24-1-8 09:26
![]() 是的,SQL可以使用一条语句来完成这个任务。由于我无法直接看到您提供的图表,我将假设您有一个名为`stocks`的表,其结构类似于以下形式: ```sql CREATE TABLE stocks ( stock_id VARCHAR(2), -- 股票ID,例如'C1', 'C2'等 date DATE, -- 日期 close_price DECIMAL(10, 2) -- 收盘价 ); ``` 在这个表结构中,`stock_id`列包含股票的标识符(C1, C2, ..., C6),`date`列包含日期信息,而`close_price`列包含每天的收盘价格。 要计算每支股票每天的收益率,您可以使用`LAG`窗口函数来获取前一天的收盘价,并进行计算。以下是一个SQL查询示例: ```sql SELECT stock_id, date, close_price, (close_price - LAG(close_price) OVER (PARTITION BY stock_id ORDER BY date)) / NULLIF(LAG(close_price) OVER (PARTITION BY stock_id ORDER BY date), 0) AS pctchange FROM stocks ORDER BY stock_id, date; ``` 在这个查询中: - `LAG(close_price) OVER (PARTITION BY stock_id ORDER BY date)`用于获取按`stock_id`分组并按`date`排序的前一天的`close_price`。 - `NULLIF`函数用于防止除以零的错误。如果前一天的收盘价为0,`NULLIF`函数将返回`NULL`,这会导致整个表达式的结果也为`NULL`。在实际应用中,您可能需要根据业务需求决定如何处理这种情况(例如,将其视为一个特殊值,或者用其他方式处理)。 - 查询结果按`stock_id`和`date`排序,以便您可以轻松地查看每支股票每天的收益率。 请注意,由于`LAG`函数在没有前一行的情况下会返回`NULL`,因此每支股票的第一天将没有收益率数据(或收益率将为`NULL`)。如果您希望在这种情况下返回0或其他值,可以使用`COALESCE`函数来处理`NULL`值,如下所示: ```sql SELECT stock_id, date, close_price, COALESCE((close_price - LAG(close_price) OVER (PARTITION BY stock_id ORDER BY date)) / NULLIF(LAG(close_price) OVER (PARTITION BY stock_id ORDER BY date), 0), 0) AS pctchange FROM stocks ORDER BY stock_id, date; ``` 在这个修改后的查询中,`COALESCE`函数将`NULL`值替换为0,以便在没有前一天收盘价的情况下返回0作为收益率。 -------------------如果建表为 表结构为 时间 股票1 股票2 股票3 股票4 股票5 股票6------------------ 问: 假如有张表(如下图)stocks,记录了6支股票(C1-C6)一段时间的收盘价格,表结构为 时间 股票1 股票2 股票3 股票4 股票5 股票6 现在需要计算这6支股票这段时间每天的收益率,SQL能用一条语句完成吗? 当天收益率(pctchange) = (今日收盘价 - 昨日收盘价)/昨日收盘价 文心答: 为了使用SQL计算每支股票每天的收益率,你可以使用窗口函数,特别是LAG()函数,来获取前一天的收盘价。然后,你可以计算收益率。 假设你的stocks表的结构如下: CREATE TABLE stocks ( time DATE, stock1 FLOAT, stock2 FLOAT, stock3 FLOAT, stock4 FLOAT, stock5 FLOAT, stock6 FLOAT ); 你可以使用以下的SQL查询来计算每天的收益率: sql复制代码 ![]() 这个查询首先创建了一个名为StockChanges的临时视图,该视图包含每天的收盘价以及前一天的收盘价。然后,主查询使用这个临时视图来计算每天的收益率。 注意:对于每支股票的第一天,因为没有前一天的收盘价,所以收益率将是NULL。 闲聊状态 编辑于 2024-01-08 09:38 |
[491 楼] ChK
[陈年泡菜]
24-1-7 22:34
lhy02 发表于 2024-01-07 19:02 现阶段,不能完全相信他,但是,你得承认,他的知识面比任何人都要全面,如果自己有基本的代码阅读能力,他的回答先看一看再用,还是非常有帮助的。最近一年来,GPT对我的编程帮助特别大,效率提升是最直接的。 |
[490 楼] lhy02
[泡菜]
24-1-7 19:02
ChK 发表于 2024-01-07 18:37 ![]() lhy02 编辑于 2024-01-07 19:03 |
[489 楼] lhy02
[泡菜]
24-1-7 19:01
ChK 发表于 2024-01-07 18:37 ![]() |
[488 楼] ChK
[陈年泡菜]
24-1-7 18:37
好像是我想多了,画蛇添足
![]() 这样就简单多了 ![]() |
[487 楼] ChK
[陈年泡菜]
24-1-7 18:10
大信 发表于 2024-01-07 16:36 |
[486 楼] ChK
[陈年泡菜]
24-1-7 18:07
大信 发表于 2024-01-07 16:36 这种常见的需求,用CHARGPT其实还是挺靠谱的,只要你把需求写清楚,不过,就这个问题来说,他理解还是有偏差,给我写的代码是前一天和后一天的收益率: ![]() |
[485 楼] ChK
[陈年泡菜]
24-1-7 17:58
大信 发表于 2024-01-07 17:24 PYTHON俱乐部将要变成SQL俱乐部 这种常见的需求,用CHARGPT其实还是挺靠谱的,只要你把需求写清楚,不过,就这个问题来说,他理解还是有偏差,给我写的代码是前一天和后一天的收益率: Q: SQL数据库中有一张表,结构如下:ID为自增主键,D为日期,V为数值,令V1为第N天的V值,V2为N+1天的V值,X=(V2-V1)/V2,为请写一个SQL语句,生成如下两列输出:D,X A: 可以使用LAG函数来获取前一天的V值,然后使用该值计算X。以下是一个示例的SQL语句: SELECT D,(V2-V1)/V2 AS X FROOM( SELECT D,V,LAG(V) OVER (ORDER BY D)AS V1,LEAD(V) OVER (ORDER BY D) AS V2 FROM YOUR_TABLE )SUBQUERY 请将"your_table"替换为实际的表名。这个SQL语句会按照日期(D)的顺序,计算每一天的X值,其中X=(V2-V1)/V2。输出结果将包含两列:D和X。 ChK 编辑于 2024-01-07 18:03 |