找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 327|回复: 27

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

3

主题

23

帖子

23

积分

贫民

积分
23
baijianyun12345 发表于 2021-12-14 00:38:12 | 显示全部楼层 |阅读模式
test0
   ts_code trade_date      open      high       low     close  pre_close  change   pct_chg        vol       amount
  002262.SZ 2008-07-23   12.5800   15.0000   12.5500   14.0500     5.6800  8.3700  147.3592  211615.76  287362.9985
  002262.SZ 2008-07-24   14.2000   15.4500   14.1000   15.1500    14.0500  1.1000    7.8292  141080.69  208583.4505

test1
ts_code,date_start,date_end,close
002262.SZ,2020-05-02,2020-08-10,170.0299
002263.SZ,2019-10-27,2020-02-04,8.1903


结果
test0= test0.mask(test0['trade_date'] == test1.loc['date_start': 'date_end'])
      Unnamed: 0 ts_code trade_date  open  high  low  close  pre_close  change  pct_chg  vol  amount
0            NaN     NaN        NaT   NaN   NaN  NaN    NaN        NaN     NaN      NaN  NaN     NaN
1            NaN     NaN        NaT   NaN   NaN  NaN    NaN        NaN     NaN      NaN  NaN     NaN


回复

使用道具 举报

0

主题

921

帖子

921

积分

圣骑士

积分
921
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

使用道具 举报

0

主题

36

帖子

36

积分

贫民

积分
36
Annadie 发表于 2021-12-20 11:48:34 | 显示全部楼层
按条件没有匹配上,没有错误
回复 支持 反对

使用道具 举报

3

主题

23

帖子

23

积分

贫民

积分
23
baijianyun12345  楼主| 发表于 2021-12-20 20:25:26 | 显示全部楼层
Annadie 发表于 2021-12-20 11:48
按条件没有匹配上,没有错误

有的,不过看不懂,摆渡也摆渡不出来啥意思,才求助
56: FutureWarning: Automatic reindexing on DataFrame vs Series comparis** is deprecated and will raise ValueError in a future version.  Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`
我的意图
test0保存的是所有股票的历史数据,test1保存的是所有股票去年2020最高价和最低价的前100天开始和结束时间,我的设想提取test0里所有股票2020年最高价和最低价前100天的数据,不知道该怎么表示
回复 支持 反对

使用道具 举报

0

主题

36

帖子

36

积分

贫民

积分
36
Annadie 发表于 2021-12-21 08:27:25 | 显示全部楼层
Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`
==前后的数据类型不一致,前一个是Series ,后一个是DF
可以用它提示的语句替换你的 == 表达式语句,再试试看
回复 支持 反对

使用道具 举报

3

主题

23

帖子

23

积分

贫民

积分
23
baijianyun12345  楼主| 发表于 2021-12-21 11:56:54 | 显示全部楼层
Annadie 发表于 2021-12-21 08:27
Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`
==前后的数据类 ...

我把前后都改成时间内型,这是改了后的,又是怎么改啊。
.py:129: FutureWarning: Automatic reindexing on DataFrame vs Series comparis** is deprecated and will raise ValueError in a future version.  Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`
  data= data.mask(data['trade_date'] == df.loc['date_start': 'date_end'])
      Unnamed: 0 ts_code trade_date  open  high  low  close  pre_close  change  pct_chg  vol  amount
3356         NaN     NaN        NaT   NaN   NaN  NaN    NaN        NaN     NaN      NaN  NaN     NaN
3355         NaN     NaN        NaT   NaN   NaN  NaN    NaN        NaN     NaN      NaN  NaN     NaN
3354         NaN     NaN        NaT   NaN   NaN  NaN    NaN        NaN     NaN      NaN  NaN     NaN
回复 支持 反对

使用道具 举报

3

主题

23

帖子

23

积分

贫民

积分
23
baijianyun12345  楼主| 发表于 2021-12-21 12:03:28 | 显示全部楼层
Annadie 发表于 2021-12-21 08:27
Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`
==前后的数据类 ...

我的代码:

import numpy as np
import pandas as pd
import os

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")
    df['date_start']=pd.to_datetime(df['date_start'])
    df['date_end']=pd.to_datetime(df['date_end'])
    data= data.mask(data['trade_date'] == df.loc['date_start': 'date_end'])
    print(data)
回复 支持 反对

使用道具 举报

0

主题

36

帖子

36

积分

贫民

积分
36
Annadie 发表于 2021-12-21 16:15:23 | 显示全部楼层
data['trade_date'] == df.loc['date_start': 'date_end']
根据例子改一下试试看
left, right = left.align(right, axis=1, copy=False)

回复 支持 反对

使用道具 举报

3

主题

23

帖子

23

积分

贫民

积分
23
baijianyun12345  楼主| 发表于 2021-12-21 17:48:00 | 显示全部楼层
Annadie 发表于 2021-12-21 16:15
data['trade_date'] == df.loc['date_start': 'date_end']
根据例子改一下试试看
left, right = left.align ...

就是不知道怎么改啊,请指教
回复 支持 反对

使用道具 举报

3

主题

23

帖子

23

积分

贫民

积分
23
baijianyun12345  楼主| 发表于 2021-12-21 20:29:32 | 显示全部楼层
我把data= data.mask(data['trade_date'] == df.loc['date_start': 'date_end'])换成
data = data[(pd.to_datetime(data['trade_date'] ,format = '%Y-%m-%d')>= pd.to_datetime(df['date_start'],format = '%Y-%m-%d')) & (pd.to_datetime(data['trade_date'] ,format = '%Y-%m-%d') <= pd.to_datetime(df['date_end'],format = '%Y-%m-%d'))]
又出现错误
ValueError: Can only compare identically-labeled Series objects
回复 支持 反对

使用道具 举报

0

主题

921

帖子

921

积分

圣骑士

积分
921
sheeboard 发表于 2021-12-22 08:20:13 | 显示全部楼层
传个测试文件吧,帮你做做看。
回复 支持 反对

使用道具 举报

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

本版积分规则

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