Python爱好者俱乐部
18247 542
[514 楼] Trompette [泡菜]
24-4-23 21:16
大信 发表于 2024-02-25 01:39
最近使用pandas的read_excel()遇到一个告警信息,感觉很奇怪。
程序代码:
df_excel = pandas.read_excel('xyz.xlsx',sheet_name='sheet1')
结果遇到一个告警信息:
/Librar...

大概率因为文件是老 xls 格式,只是赋予了 xlsx 的新扩展名
[513 楼] Trompette [泡菜]
24-4-23 21:14
duoduobear 发表于 2024-04-22 01:37
请教各位:
有Nvidia GPU的情况下,在生成视频时,使用 libx264 和 h264_nvnec 哪个编码器更好?
我发现h264_nvnec似乎明显编码速度更快,它使用NV GPU硬件编码,速度快并不奇怪。但我看到网上也有人说libx264...

多数情况下,都可以无脑用 NVenc
如果是极度追求高画质下尽量高压缩率的发片组,那就用 libx264 CPU软压(要配好参数才能跑出比NVenc更好的画质)
[512 楼] hzxah1 [泡菜]
24-4-23 19:36
大信 发表于 2020-08-10 12:39
Python简单易学上手快,编程效率高、package非常丰富,扩展功能方便又强大。不分专业和业余,也无论老少年长年幼,堪称电脑爱好者的理想编程语言。
今年疫情期间一大收获就是学了Python编程。一边看书一边动手练习,自己思考出题目编写程序,检验学...

报名,之前做物联网服务器接触了Python,好用.
[511 楼] benniewang [资深泡菜]
24-4-22 04:08
大信 发表于 2024-02-25 01:39
最近使用pandas的read_excel()遇到一个告警信息,感觉很奇怪。
程序代码:
df_excel = pandas.read_excel('xyz.xlsx',sheet_name='sheet1')
结果遇到一个告警信息:
/Librar...
可能涉及到版权或者许可证一类的问题,应该不是技术上的。
另外推荐用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),pct_change会自动处理这件事情。
把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
对的,这种结构不符合数据库的范式设计。
但在有些情况下确非常好用,那就是在pandas的dataframe中。在进行数据分析的时候非常好用。...

数据库内部用前面说的结构,输出时可以转成c1 c2多列的形式
发布自 安卓客户端
[505 楼] 大信 [泡菜]
24-1-8 19:58
ChK 发表于 2024-01-08 15:03
一般来说,通用的数据库不会设计成C1-C6这样的表结构,因为一旦需要增加或减少股票的种类,修改程序的工作将是灾难性的。
前面闲聊兄给出的表结构才是一般的设计思路,这样的结构在设计是复杂一点,但以后增减股票都不用再改程序。
当然,如果是个人玩票性质,您...


对的,这种结构不符合数据库的范式设计。
但在有些情况下确非常好用,那就是在pandas的dataframe中。在进行数据分析的时候非常好用。

[504 楼] 大信 [泡菜]
24-1-8 19:55
lhy02 发表于 2024-01-08 15:23
pctchange我估计还要考虑停牌。就是说中间因为停牌,数据实际是空的。
那就不是简单的下一条记录-上一条记录,得跳过空记录。
----
对于停牌,计算方法是什么样的呢?也不一定是跳过空记录,也许是复制上一条记录再计算,搞不清。


是我题目没有交代清楚。就是本行减去上一行,再除以上一行,得到增长率。
股市不是每天都开门,所以用日期来说不准确。
另外,对于各个股票不定期的停盘,不可能因为停盘就让本行其他股票当天没数据。所以在数据组织的时候,这行用的是上一行的数据。不影响收益率的计算。
[503 楼] 大信 [泡菜]
24-1-8 19:54
闲聊状态 发表于 2024-01-08 13:14
大神不敢当 ,只是稍微会写一点, 开窗之类的函数 我到这还晕呢。。。
df_pct = df_stocks.pctchange() 那对于跳日子的情况,是不是也不是 今天-昨天 了,而是这个减上一个?


对的,是我题目没有交代清楚。就是本行减去上一行,再除以上一行,得到增长率。
股市不是每天都开门,所以用日期来说不准确。
另外,对于各个股票不定期的停盘,不可能因为停盘就让本行其他股票当天没数据。所以在数据组织的时候,这行用的是上一行的数据。不影响收益率的计算。
[502 楼] lhy02 [泡菜]
24-1-8 15:23
大信 发表于 2024-01-08 13:07
SQL大神就是牛,一条语句可以搞定。 非常佩服!
不过pandas也很厉害的哦,也是一条语句搞定:df_pct = df_stocks.pctchange()
没别的意思就想表达“条条大路通罗马”,关键是要有个适合...
pctchange我估计还要考虑停牌。就是说中间因为停牌,数据实际是空的。
那就不是简单的下一条记录-上一条记录,得跳过空记录。
----
对于停牌,计算方法是什么样的呢?也不一定是跳过空记录,也许是复制上一条记录再计算,搞不清。
lhy02 编辑于 2024-01-08 15:29
[501 楼] ChK [陈年泡菜]
24-1-8 15:07
lhy02 发表于 2024-01-08 14:20
基本的代码阅读能力都不一定行,chatgpt很容易把人带沟里去。我自它出来就在用。
对于小白,更是灭顶之灾。楼主水平不知,但看他的发言,应该是很容易带沟里去。
百度可能找不到答案,但至少那些搜出来的,本身基本是正确的。这样不至于迷惑人。
重要的是要用自己的数据验证,而且,要搞懂了再用。更多的时候,写程序慢是因为一些琐碎的知识记不住,这时候用GPT就比用搜索引擎更高效了。
至于大框架和算法,可以和他讨论后再做决定,正如前面说的,他的知识面比任何人都宽,这就足以做一个好帮手了。
[500 楼] ChK [陈年泡菜]
24-1-8 15:03
大信 发表于 2024-01-08 12:59
对的,C1-C6都是以股票代码或名称命名的字段。
结果也要放在与下图相同结构的一张表中。

一般来说,通用的数据库不会设计成C1-C6这样的表结构,因为一旦需要增加或减少股票的种类,修改程序的工作将是灾难性的。
前面闲聊兄给出的表结构才是一般的设计思路,这样的结构在设计是复杂一点,但以后增减股票都不用再改程序。
当然,如果是个人玩票性质,您这么建也没问题,对具体需求来说,这可能是成本最低的实现,数据库逻辑也更简单和高效。
[499 楼] lhy02 [泡菜]
24-1-8 14:20
ChK 发表于 2024-01-07 22:34
现阶段,不能完全相信他,但是,你得承认,他的知识面比任何人都要全面,如果自己有基本的代码阅读能力,他的回答先看一看再用,还是非常有帮助的。最近一年来,GPT对我的编程帮助特别大,效率提升是最直接的。
基本的代码阅读能力都不一定行,chatgpt很容易把人带沟里去。我自它出来就在用。
对于小白,更是灭顶之灾。楼主水平不知,但看他的发言,应该是很容易带沟里去。
百度可能找不到答案,但至少那些搜出来的,本身基本是正确的。这样不至于迷惑人。
[498 楼] 闲聊状态 [泡菜]
24-1-8 13:14
大信 发表于 2024-01-08 13:07
SQL大神就是牛,一条语句可以搞定。 非常佩服!
不过pandas也很厉害的哦,也是一条语句搞定:df_pct = df_stocks.pctchange()
没别的意思就想表达“条条大路通罗马”,关键是要有个适合...
大神不敢当 ,只是稍微会写一点, 开窗之类的函数 我到这还晕呢。。。

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,C2,每个股票一个字段?


对的,C1-C6都是以股票代码或名称命名的字段。
结果也要放在与下图相同结构的一张表中。
[495 楼] 闲聊状态 [泡菜]
24-1-8 10:12
单纯的要求今天-昨天反倒是简单了
[494 楼] 闲聊状态 [泡菜]
24-1-8 09:55
闲聊状态 发表于 2024-01-08 09:26
是的,SQL可以使用一条语句来完成这个任务。由于我无法直接看到您提供的图表,我将假设您有一个名为`stocks`的表,其结构类似于以下形式:
```sql
CREATE TABLE stocks (
    stock_id VARCHAR(2), ...

至于跳日期的 我觉得跳了就跳了吧,也不能都空着不是。。。
如果非要严格按照 今天-昨天 来,那也不用使用函数了,直接倆一样的表 进行date=date-1关联,然后直接按公式减除就好了 反正跳日的也是很多null。。
[493 楼] 闲聊状态 [泡菜]
24-1-8 09:31
ChK 发表于 2024-01-07 18:07
PYTHON俱乐部将要变成SQL俱乐部
如果是讨论Python的数据分析 那么少不了要有SQL参与

但是 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
如果按照你上一个chatgpt对LAG LEAD的解释,恐怕计算的是第3天-第1天。九成人工智张了。

现阶段,不能完全相信他,但是,你得承认,他的知识面比任何人都要全面,如果自己有基本的代码阅读能力,他的回答先看一看再用,还是非常有帮助的。最近一年来,GPT对我的编程帮助特别大,效率提升是最直接的。
[490 楼] lhy02 [泡菜]
24-1-7 19:02
ChK 发表于 2024-01-07 18:37
好像是我想多了,画蛇添足
这样就简单多了
如果按照你上一个chatgpt对LAG LEAD的解释,恐怕计算的是第3天-第1天。九成人工智张了。
lhy02 编辑于 2024-01-07 19:03
[489 楼] lhy02 [泡菜]
24-1-7 19:01
ChK 发表于 2024-01-07 18:37
好像是我想多了,画蛇添足
这样就简单多了
如果按照你上一个chatgpt对LAG LEAD的解释,恐怕计算的是第3天-第1天。九成人工※※了。
[488 楼] ChK [陈年泡菜]
24-1-7 18:37
好像是我想多了,画蛇添足
这样就简单多了
[487 楼] ChK [陈年泡菜]
24-1-7 18:10
大信 发表于 2024-01-07 16:36
请教一个问题,假如有张表(如下图)stocks,记录了6支股票(C1-C6)一段时间的收盘价格,现在需要计算这6支股票这段时间每天的收益率,SQL能用一条语句完成吗?
当天收益率(pctchange) = (今日收盘价 - 昨日收盘价)/昨日收盘价
另外,你这张表的结构在数据库里真是C1,C2,每个股票一个字段?
[486 楼] ChK [陈年泡菜]
24-1-7 18:07
大信 发表于 2024-01-07 16:36
请教一个问题,假如有张表(如下图)stocks,记录了6支股票(C1-C6)一段时间的收盘价格,现在需要计算这6支股票这段时间每天的收益率,SQL能用一条语句完成吗?
当天收益率(pctchange) = (今日收盘价 - 昨日收盘价)/昨日收盘价
PYTHON俱乐部将要变成SQL俱乐部
这种常见的需求,用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