分析代码temp_df.iloc[(temp_df>10).iloc[:0].values:][["书名"]].to_excel("3.xlsx",header=["作品数量"])
时间: 2023-12-31 19:03:48 浏览: 93
这段代码使用了 pandas 库来处理 DataFrame 数据。下面是对该代码的分析:
1. `temp_df` 是一个 DataFrame 数据类型,其中包含了一列名为"书名"的数据。
2. `(temp_df > 10).iloc[:0].values` 这部分代码使用了 DataFrame 的条件查询,它会返回一个与 `temp_df` 相同大小的 DataFrame,其中的每个元素都是一个布尔值,表示该位置上的元素是否大于 10。`.iloc[:0]` 表示查询第 0 行,即只查询第一行的数据。`.values` 表示将该 DataFrame 转换为一个 NumPy 数组。
3. `temp_df.iloc[...]` 这部分代码使用了 DataFrame 的位置查询,它会返回一个新的 DataFrame,其中包含了从指定位置开始的所有行和列。
4. `["书名"]` 表示选取了 DataFrame 中的一列,即"书名"列。
5. `.to_excel("3.xlsx",header=["作品数量"])` 表示将 DataFrame 写入到名为"3.xlsx"的 Excel 文件中,并且在第一行添加一个名为"作品数量"的列头。
综上所述,该代码的作用是将`temp_df` 中"书名"列中的数据写入到名为"3.xlsx"的 Excel 文件中,但是只会写入那些大于 10 的数据,并且在第一行添加一个名为"作品数量"的列头。
相关问题
pro = ts.pro_api() df = pro.daily(fields = 'ts_code,trade_date,open,close') def get_stock_poll(df): stock_pool=[] for code in df['ts_code'].unique(): temp_df = df[df['ts_code'] == code ] for i in range(len(temp_df)-3): if (temp_df.iloc[i+3]['close']>temp_df.iloc[i+2]['close']) and\(temp_df.iloc[i+2]['close']>temp_df.iloc[i+2]['open']) and\(temp_df.iloc[i+1]['close']>temp_df.iloc[i+1]['open']) and\(temp_df.iloc[i]['close']>temp_df.iloc[i]['open']) stock_pool.append(code) break return stock_pool def buy_stock(stock_pool,df): buy_list = [] for code in stock_pool: temp_df = df[df['ts_code']==code] for i in range(len(temp_df-2)): if(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] < temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 1]['close'])and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i]['close']): buy_list.append(code) break return buy_list def sell_stock(buy_stock,df): sell_list = [] for stock in buy_list: buy_date=dateime.datetime.strptime(stock[1],"%Y-%m-%d") current_date = datetime.datetime.today() days_held = (current_date - buy_date).days if days_held >=3: sell_list.append(stock[0]) print("sell list:",sell_list)修改上述代码
以下是修改后的代码:
```python
import datetime
pro = ts.pro_api()
df = pro.daily(fields='ts_code,trade_date,open,close')
def get_stock_pool(df):
stock_pool = []
for code in df['ts_code'].unique():
temp_df = df[df['ts_code'] == code]
for i in range(len(temp_df)-3):
if (temp_df.iloc[i+3]['close'] > temp_df.iloc[i+2]['close']) and \
(temp_df.iloc[i+2]['close'] > temp_df.iloc[i+2]['open']) and \
(temp_df.iloc[i+1]['close'] > temp_df.iloc[i+1]['open']) and \
(temp_df.iloc[i]['close'] > temp_df.iloc[i]['open']):
stock_pool.append(code)
break
return stock_pool
def buy_stock(stock_pool, df):
buy_list = []
for code in stock_pool:
temp_df = df[df['ts_code'] == code]
for i in range(len(temp_df)-2):
if (temp_df.iloc[i+2]['close'] < temp_df.iloc[i+2]['open']) and \
(temp_df.iloc[i+1]['close'] < temp_df.iloc[i+1]['open']) and \
(temp_df.iloc[i]['close'] < temp_df.iloc[i]['open']) and \
(temp_df.iloc[i+2]['close'] < temp_df.iloc[i+1]['close']) and \
(temp_df.iloc[i+1]['close'] < temp_df.iloc[i]['close']):
buy_list.append((code, temp_df.iloc[i+2]['trade_date']))
break
return buy_list
def sell_stock(buy_list, df):
sell_list = []
for stock in buy_list:
buy_date = datetime.datetime.strptime(stock[1], "%Y%m%d")
current_date = datetime.datetime.today()
days_held = (current_date - buy_date).days
if days_held >= 3:
sell_list.append(stock[0])
print("sell list:", sell_list)
```
我对代码进行了几个修改:
1. 在 `get_stock_pool`、`buy_stock` 和 `sell_stock` 的函数定义之后,我在每个函数调用的括号中添加了参数。这些参数是调用函数所需的数据。
2. 在 `buy_stock` 和 `sell_stock` 中,我将 `buy_list.append(code)` 和 `sell_list.append(stock[0])` 分别改为 `buy_list.append((code, temp_df.iloc[i+2]['trade_date']))` 和 `sell_list.append(stock[0])`。这是因为在 `buy_stock` 中,列表中的元素需要包含股票代码和买入日期,而在 `sell_stock` 中,列表中的元素只需要包含股票代码。
3. 在 `sell_stock` 中,我将 `for stock in buy_list:` 改为 `for stock in buy_list:`,因为在 `buy_stock` 函数中返回的是一个元组列表,而不是一个股票代码列表。同时,我将 `buy_list` 改为 `buy_list`,因为这是函数参数的名称。
希望这些修改能够帮助你解决问题!
import tushare as ts import datetime # 设置 token,用于认证 ts.set_token('530fbc2b682d65696dbeec010a893f70d6953fbb6842151003c3e12f') # 初始化 tushare pro = ts.pro_api() df = pro.daily(fields = 'ts_code,trade_date,open,close',start_date='20180701', end_date='20180718') def get_stock_poll(df): stock_pool=[] for code in df['ts_code'].unique(): temp_df = df[df['ts_code'] == code ] for i in range(len(temp_df)-3): if (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close']) and \ (temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] > temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] > temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close'])and \ (temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 1]['close']) and\ (temp_df.iloc[i + 1]['close'] > temp_df.iloc[i]['close']): stock_pool.append(code) break return stock_pool def buy_stock(stock_pool,df): buy_list = [] for code in stock_pool: temp_df = df[df['ts_code']==code] for i in range(len(temp_df-2)): if(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] < temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 1]['close'])and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i]['close']): buy_list.append(code) break return buy_list def sell_stock(buy_stock,df): sell_list = [] for stock in buy_list: buy_date=dateime.datetime.strptime(stock[1],"%Y-%m-%d") current_date = datetime.datetime.today() days_held = (current_date - buy_date).days if days_held >=3: sell_list.append(stock[0]) print("sell list:",sell_list)要求上述代码在聚宽上运行
这段代码需要进行一些修改才能在聚宽上运行,具体修改如下:
1. 将导入的 tushare 改为聚宽提供的接口,即 import jqdatasdk as jq
2. 将 tushare 的 token 设置语句删除,因为在聚宽中不需要 token 认证
3. 将 tushare 的 pro_api() 改为聚宽的 auth(),并传入聚宽账号和密码进行认证
4. 将 tushare 的 daily() 改为聚宽的 get_price(),并传入聚宽的股票代码格式 '000001.XSHE',以及开始和结束时间
5. 将 datetime 改为聚宽提供的 jqdata.datetime,即 import jqdatasdk as jq 和 from jqdatasdk import *,并将代码中的 datetime.datetime 改为 jqdata.datetime。
修改后的代码如下:
```
import jqdatasdk as jq
from jqdatasdk import *
auth('聚宽账号', '聚宽密码')
df = get_price('000001.XSHE', start_date='2018-07-01', end_date='2018-07-18', fields=['open', 'close'])
def get_stock_poll(df):
stock_pool=[]
for code in df.index.unique():
temp_df = df[df.index == code ]
for i in range(len(temp_df)-3):
if (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close']) and \
(temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 2]['open']) and \
(temp_df.iloc[i + 1]['close'] > temp_df.iloc[i + 1]['open']) and \
(temp_df.iloc[i]['close'] > temp_df.iloc[i]['open'])and \
(temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close'])and \
(temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 1]['close']) and\
(temp_df.iloc[i + 1]['close'] > temp_df.iloc[i]['close']):
stock_pool.append(code)
break
return stock_pool
def buy_stock(stock_pool,df):
buy_list = []
for code in stock_pool:
temp_df = df[df.index==code]
for i in range(len(temp_df)-2):
if(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 2]['open']) and \
(temp_df.iloc[i + 1]['close'] < temp_df.iloc[i + 1]['open']) and \
(temp_df.iloc[i]['close'] < temp_df.iloc[i]['open'])and \
(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 1]['close'])and \
(temp_df.iloc[i + 1]['close'] < temp_df.iloc[i]['close']):
buy_list.append(code)
break
return buy_list
def sell_stock(buy_list,df):
sell_list = []
for stock in buy_list:
buy_date=jqdata.datetime.strptime(str(stock[1]),"%Y-%m-%d")
current_date = jqdata.datetime.today()
days_held = (current_date - buy_date).days
if days_held >=3:
sell_list.append(stock[0])
print("sell list:",sell_list)
```
注意,由于聚宽不支持 tushare 的 ts_code,因此需要将股票代码格式改为聚宽支持的 '000001.XSHE' 格式。另外需要注意代码中的大小写,聚宽中的 jqdatasdk、jqdata.datetime 都是小写。
阅读全文