当前位置: 首页 > 知识库问答 >
问题:

python3.x - Python数据缺失怎么顺延与数据分段求值?

郑茂材
2023-08-11
import pandas as pdimport globimport osos.chdir('path/stock_hfqqa')  summ=pd.DataFrame()for file in glob.glob('*.csv'):    fname='.'.join(file.split('.')[0:2])    df=pd.read_csv(file,dtype={'trade_date':'str'})    df['trade_date']=pd.to_datetime(df['trade_date'])    df['year']=df['trade_date'].dt.year    min_row=df[df['year']==2020]['close'].idxmin()    end_date_min=df.iloc[min_row]['trade_date']    start_date_min=end_date_min-pd.Timedelta(days=100)    mindf=df.loc[(df['trade_date']>=start_date_min) & (df['trade_date']<=end_date_min)]    tempdf=mindf.head(1).copy()    tempdf['date_start']=start_date_min    summ=summ.append(tempdf,ignore_index=True)    filemin=fname+'_min'+'.xlsx'    mindf.to_excel(filemin,index=False)    max_row=df[df['year']==2020]['close'].idxmax()    end_date_max=df.iloc[max_row]['trade_date']    start_date_max=end_date_max-pd.Timedelta(days=100)    maxdf=df.loc[(df['trade_date']>=start_date_max) & (df['trade_date']<=end_date_max)]    tempdf=maxdf.head(1).copy()    tempdf['date_start']=start_date_max    summ=summ.append(tempdf,ignore_index=True)       filemax=fname+'_max'+'.xlsx'    maxdf.to_excel(filemax,index=False)summ=summ[['ts_code','date_start','trade_date','close']]summ.columns=['ts_code','date_start','date_end','close']summ.to_excel('bbbb.xlsx',index=False)

计算出的 start_date_min 日期当日可能有数据也可能没数据,当没数据就想顺延到有数据的日期,请问怎么改代码,谢谢。。。。
还有个问题就是2020怎么换成年份字符窜,有知道的一起指教,就是怎么求每只 code 每年的最低最高价,一年一年算很麻烦,就想一下算所有的,一并谢了。。。

共有1个答案

鲁钱明
2023-08-11

CSV 文件:

import pandas as pdimport datetime# 创建示例数据data = {    'trade_date': [datetime.date(2020, i, 1).strftime('%Y-%m-%d') for i in range(1, 13)],    'ts_code': ['000001.SZ'] * 12,    'close': [10, 9, 8, 7, 6, 7, 8, 9, 10, 11, 12, 13]}df = pd.DataFrame(data)# 保存为 CSV 文件df.to_csv('000001.SZ.csv', index=False)

修改:

import osimport glob# 设置工作目录os.chdir('/path/to/csv/files')# 创建 summ DataFramesumm = pd.DataFrame()# 遍历 CSV 文件for file in glob.glob('*.csv'):    fname = '.'.join(file.split('.')[0:2])    df = pd.read_csv(file, dtype={'trade_date': 'str'})    df['trade_date'] = pd.to_datetime(df['trade_date'])    df['year'] = df['trade_date'].dt.year.astype(str)  # 将年份转为字符串    # 以下为找到最小值的部分,并使用 bfill() 处理缺失数据    min_row = df[df['year'] == '2020']['close'].idxmin()    end_date_min = df.iloc[min_row]['trade_date']    start_date_min = end_date_min - pd.Timedelta(days=100)    start_idx_min = df.loc[df['trade_date'] >= start_date_min].index.min()    if pd.isnull(df.loc[start_idx_min, 'close']):        start_date_min = df.loc[start_idx_min:].bfill().iloc[0]['trade_date']    mindf = df.loc[(df['trade_date'] >= start_date_min) & (df['trade_date'] <= end_date_min)]    tempdf = mindf.head(1).copy()    tempdf['date_start'] = start_date_min    summ = summ.append(tempdf, ignore_index=True)    filemin = fname + '_min' + '.xlsx'    mindf.to_excel(filemin, index=False)    # 同理处理最大值的部分    max_row = df[df['year'] == '2020']['close'].idxmax()    end_date_max = df.iloc[max_row]['trade_date']    start_date_max = end_date_max - pd.Timedelta(days=100)    start_idx_max = df.loc[df['trade_date'] >= start_date_max].index.min()    if pd.isnull(df.loc[start_idx_max, 'close']):        start_date_max = df.loc[start_idx_max:].bfill().iloc[0]['trade_date']    maxdf = df.loc[(df['trade_date'] >= start_date_max) & (df['trade_date'] <= end_date_max)]    tempdf = maxdf.head(1).copy()    tempdf['date_start'] = start_date_max    summ = summ.append(tempdf, ignore_index=True)    filemax = fname + '_max' + '.xlsx'    maxdf.to_excel(filemax, index=False)# 结果保存为 Excel 文件summ = summ[['ts_code', 'date_start', 'trade_date', 'close']]summ.columns = ['ts_code', 'date_start', 'date_end', 'close']summ.to_excel('bbbb.xlsx', index=False)
 类似资料:
  • 这个结果是怎么来的?

  • 本文向大家介绍python实现数据清洗(缺失值与异常值处理),包括了python实现数据清洗(缺失值与异常值处理)的使用技巧和注意事项,需要的朋友参考一下 1。 将本地sql文件写入mysql数据库 本文写入的是python数据库的taob表 其中总数据为9616行,列分别为title,link,price,comment 2。使用python链接并读取数据 查看数据概括 说明数据的导入是正确的,

  • 问题内容: 我有一个回归模型,其中因变量是连续的,但是90%的自变量是分类的(有序和无序),大约30%的记录具有缺失值(更糟糕的是,它们无规律地随机缺失,也就是说,超过百分之四十五的数据至少有一个缺失值)。没有先验理论来选择模型的规格,因此关键任务之一是在运行回归之前进行尺寸缩减。虽然我知道用于连续变量降维的几种方法,但我不知道关于分类数据的类似静态文献(也许,除了作为对应分析的一部分,这基本上是

  • 本文向大家介绍如何处理缺失值数据?相关面试题,主要包含被问及如何处理缺失值数据?时的应答技巧和注意事项,需要的朋友参考一下 数据中可能会有缺失值,处理的方法有两种,一种是删除整行或者整列的数据,另一种则是使用其他值去填充这些缺失值。在Pandas库,有两种很有用的函数用于处理缺失值:isnull()和dropna()函数能帮助我们找到数据中的缺失值并且删除它们。如果你想用其他值去填充这些缺失值,则

  • 本文向大家介绍你是怎么做数据分析的?相关面试题,主要包含被问及你是怎么做数据分析的?时的应答技巧和注意事项,需要的朋友参考一下 考察的是数据分析的能力。主要从以下4个维度回答,结合具体的数据分析来进行阐述: 明确数据分析的目的; 确定数据分析的方法以及获取所需要的数据; 对数据进行预处理,并进行分析; 输出数据分析报告,提出相应建议。

  • 现在系统里面积累了大约五六年的缴费数据。 希望分离出一个冷数据库,用来保存2年以前的数据。 而主库只保存2年以内的热数据。 这个过程中,怎么保证服务不停机,实现平滑迁移呢? 怎么实现迁移完成后的数据,对于用户查询热数据、冷数据是透明无感的?