找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: baijianyun12345

[求助] 读取数据出错该怎么处理

6

主题

26

帖子

26

积分

贫民

积分
26
baijianyun12345  楼主| 发表于 2021-12-23 15:06:44 | 显示全部楼层
sheeboard 发表于 2021-12-23 13:50
我试过了,应该没错,最小用idxmin(),遍历文件用glob.glob,具体细节自己去调整吧。
顺便讲一下,iloc是索引 ...

我的代码,哪里错的,请帮我改改:
path = 'C:/Users/Administrator/Desktop/stock333/stock_hfq'
def get_stock_code_list_in_one_dir(path):
"""
从指定文件夹下,导入所有csv文件的文件名
:param path:
:return:
"""
stock_list = []

# 系统自带函数os.walk,用于遍历文件夹中的所有文件
for root, dirs, files in os.walk(path):
    if files:  # 当files不为空的时候
        for f in files:
            if f.endswith('.csv'):
                stock_list.append(f[:9])
        #print(files)

return sorted(stock_list)
stockk_list = get_stock_code_list_in_one_dir(path)
all_stock=pd.DataFrame()
for code in stockk_list:
data = pd.read_csv(path + '/%s.csv' % code, header=0,encoding='gbk')
data['trade_date']=pd.to_datetime(data['trade_date'].astype('string'))
data.sort_values(by = 'trade_date',inplace=True)
df=pd.read_csv("C:/Users/Administrator/Desktop/bbb.csv")
print(data)

res_df = pd.DataFrame()
res_list = []
for index, row in df.iterrows():
    _start = row['date_start']
    _end = row['date_end']
    tmp = data.loc[(data['trade_date']>_start)&(data['trade_date']<_end)]
    print(tmp)
    res_list.append(tmp)
   
if res_list:
    res_df = pd.concat(res_list)

res_df
res_df.to_csv("C:/Users/Administrator/Desktop/ppp.csv",mode='a', index=False)
支持(0)反对(0)回复 | baijianyun12345 | 园豆:192 (初学一级) | 2021-12-21 11:16 | 修改  删除
我用2只股票数据来实验的结果,前面都对
000001.SZ,2019-12-14,2020-03-23,1326.4034
000001.SZ,2020-08-23,2020-12-01,2226.5124
000560.SZ,2020-02-12,2020-05-22,15.9701
000560.SZ,2020-02-15,2020-05-25,15.9701
算000560就不对了,第三行441股票代码和时间就对不上了,应该算000560.SZ,2020-02-12了可还是000001,你的我也试试再回你,感谢你的回复
247,000001.SZ,2020-11-27,2220.96,2220.96,2152.1102,2187.6456,2165.436,22.20959999999968,1.0256
246,000001.SZ,2020-11-30,2209.8552,2318.6822,2175.4303,2192.0875,2187.6456,4.44190000000026,0.203
441,000001.SZ,2020-02-13,1605.876,1624.4347,1594.9591,1599.3258,1612.4261,-13.100299999999834,-0.8125
440,000001.SZ,2020-02-14,1610.2427,1652.8187,1604.7843,1640.8101,1599.3258,41.48429999999985,2.5939
439,000001.SZ,2020-02-17,1641.9018,1677.9275,1629.8932,1677.9275,1640.8101,37.11740000000009,2.2621
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2021-12-23 16:09:02 | 显示全部楼层
本帖最后由 sheeboard 于 2021-12-23 16:16 编辑

问一下,你最终结果要什么样子,是所有数据放一个文件,还是一个tscode放一个文件或两个文件?
回复 支持 反对

使用道具 举报

6

主题

26

帖子

26

积分

贫民

积分
26
baijianyun12345  楼主| 发表于 2021-12-23 17:40:21 | 显示全部楼层
sheeboard 发表于 2021-12-23 16:09
问一下,你最终结果要什么样子,是所有数据放一个文件,还是一个tscode放一个文件或两个文件?
...

首先说以下stock_hfqaa是股票数据文件,bbb是我想提取stock_hfqaa里文件数据的位置数据,如
000001.SZ,2019-12-14,2020-03-23,1326.4034
000001.SZ,2020-08-23,2020-12-01,2226.5124
000560.SZ,2020-02-12,2020-05-22,15.9701
000560.SZ,2020-02-15,2020-05-25,15.9701
000001第一行是最小值第二行是最大值前100天开始和结束时间,我想以bbb位置文件得到stock_hfqaa里每支股票的最小值和最大值前100天开始和结束这段时间的数据,而不是一只。
最后当然文件分开放好一些,一个股票一个表,条理清除点
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2021-12-23 19:55:47 | 显示全部楼层
本帖最后由 sheeboard 于 2021-12-23 19:56 编辑

参考

  1. import pandas as pd
  2. import glob
  3. import os

  4. os.chdir('path/stock_hfqqa')  

  5. summ=pd.DataFrame()

  6. for file in glob.glob('*.csv'):
  7.     fname='.'.join(file.split('.')[0:2])
  8.    
  9.     df=pd.read_csv(file,dtype={'trade_date':'str'})
  10.     df['trade_date']=pd.to_datetime(df['trade_date'])
  11.     df['year']=df['trade_date'].dt.year
  12.    
  13.     min_row=df[df['year']==2020]['close'].idxmin()
  14.     end_date_min=df.iloc[min_row]['trade_date']
  15.     start_date_min=end_date_min-pd.Timedelta(days=100)
  16.     mindf=df.loc[(df['trade_date']>=start_date_min) & (df['trade_date']<=end_date_min)]
  17.     tempdf=mindf.head(1).copy()
  18.     tempdf['date_start']=start_date_min
  19.     summ=summ.append(tempdf,ignore_index=True)
  20.     filemin=fname+'_min'+'.xlsx'
  21.     mindf.to_excel(filemin,index=False)
  22.    
  23.     max_row=df[df['year']==2020]['close'].idxmax()
  24.     end_date_max=df.iloc[max_row]['trade_date']
  25.     start_date_max=end_date_max-pd.Timedelta(days=100)
  26.     maxdf=df.loc[(df['trade_date']>=start_date_max) & (df['trade_date']<=end_date_max)]
  27.     tempdf=maxdf.head(1).copy()
  28.     tempdf['date_start']=start_date_max
  29.     summ=summ.append(tempdf,ignore_index=True)   
  30.     filemax=fname+'_max'+'.xlsx'
  31.     maxdf.to_excel(filemax,index=False)
  32.    
  33. summ=summ[['ts_code','date_start','trade_date','close']]
  34. summ.columns=['ts_code','date_start','date_end','close']
  35. summ.to_excel('bbbb.xlsx',index=False)
复制代码

result.zip

129.17 KB, 下载次数: 1

回复 支持 1 反对 0

使用道具 举报

6

主题

26

帖子

26

积分

贫民

积分
26
baijianyun12345  楼主| 发表于 2021-12-24 09:25:19 | 显示全部楼层

谢谢老师,用直接求值的方式得出结果,万分感谢,如果可以的话,还是想从bbb读取数据确定我需要的data股票数据,毕竟我的思路是这么来的。
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2021-12-24 10:23:53 | 显示全部楼层
参考
  1. target=pd.read_csv('bbbb.csv')   
  2. for code,data in target.groupby('ts_code'):
  3.     file=code+'.csv'
  4.     df=pd.read_csv(file,dtype={'trade_date':'str'})
  5.     df['trade_date']=pd.to_datetime(df['trade_date'])
  6.     tempdf=pd.DataFrame()
  7.     for index,row in data.iterrows():
  8.         star=row['date_start']
  9.         end=row['date_end']  
  10.         datadf=df.loc[(df['trade_date']>=start) & (df['trade_date']<=end)]
  11.         tempdf=tempdf.append(datadf,ignore_index=True)
  12.         tempdf.to_excel(code+'.xlsx',index=False)
复制代码

bbbb.csv文件里最好加个列,标明是max还是min的数据,方便后面查看或分文件。
回复 支持 反对

使用道具 举报

6

主题

26

帖子

26

积分

贫民

积分
26
baijianyun12345  楼主| 发表于 2021-12-24 10:53:45 | 显示全部楼层
sheeboard 发表于 2021-12-24 10:23
参考

bbbb.csv文件里最好加个列,标明是max还是min的数据,方便后面查看或分文件。 ...

这怎么加啊,一只股票就两行数据,一行最大一行最小,除非把他们分开,一列最大,一列最小还有结束时间,具体怎么做还没想好,我是用的signal.argrelextrema()求的最大最小值
回复 支持 反对

使用道具 举报

6

主题

26

帖子

26

积分

贫民

积分
26
baijianyun12345  楼主| 发表于 2021-12-24 11:51:22 | 显示全部楼层
sheeboard 发表于 2021-12-24 10:23
参考

bbbb.csv文件里最好加个列,标明是max还是min的数据,方便后面查看或分文件。 ...

没看到上面的,谢谢了,我试试看。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表