Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在相关的单独数据框中基于日期删除非公共行_Python_Pandas_Yahoo Finance - Fatal编程技术网

Python 在相关的单独数据框中基于日期删除非公共行

Python 在相关的单独数据框中基于日期删除非公共行,python,pandas,yahoo-finance,Python,Pandas,Yahoo Finance,我与雅虎金融数据框架公司合作。我已经下载了20年来几个市场指数(纳斯达克、SP500、DJI、EUROSTOXX…)的数据。我意识到每个数据帧并不共享相同的len,因此我编写了一些代码来解决这个问题。我希望每个数据帧在同一行索引中具有相同的len,具有相同的日期 e、 g.我有10个数据帧,但其中只有9个数据帧有“2006-03-15”,那么我必须删除索引未知但日期为“2006-03-15”的行,因为9个数据帧有此观察结果 代码如下: directory = os.getcwd() +

我与雅虎金融数据框架公司合作。我已经下载了20年来几个市场指数(纳斯达克、SP500、DJI、EUROSTOXX…)的数据。我意识到每个数据帧并不共享相同的
len
,因此我编写了一些代码来解决这个问题。我希望每个数据帧在同一行索引中具有相同的
len
,具有相同的日期

e、 g.我有10个数据帧,但其中只有9个数据帧有“2006-03-15”,那么我必须删除索引未知但日期为“2006-03-15”的行,因为9个数据帧有此观察结果

代码如下:

    directory = os.getcwd() + '/data'
    main_asset = 'NASDAQ'
    dfs_dict = dict()
    dfs_dict[main_asset] = pd.read_csv(os.path.join(directory, main_asset + '.csv'))

    for filename in os.listdir(directory):
        if filename == main_asset + '.csv':
            continue
        filename_split = filename.split('.', 1)
        dfs_dict[filename_split[0]] = pd.read_csv(os.path.join(directory, filename))

    ## clean rows that do not share same date
    start_date = dt.date(year=2000, month=1, day=1)
    end_date = dt.date(year=2021, month=1, day=1)
    current_date = start_date

    max_len = 0.0
    for item in list(dfs_dict.keys()):
        if len(dfs_dict[item]) > max_len:
            max_len = len(dfs_dict[item])
            max_len_item = item

    for i in range(len(dfs_dict[max_len_item])):
        idx_list = list()
        for asset in dfs_dict.keys():
            df = dfs_dict[asset]
            idx = df.index[df['Date'] == current_date.isoformat()].to_list()
            if len(idx) != 0:
                idx_list.append(idx)

        if len(idx_list) == 0:
            continue

        if len(idx_list) != len(dfs_dict):
            for asset in dfs_dict.keys():
                df = dfs_dict[asset]
                idx = df.index[df['Date'] == current_date.isoformat()].to_list()
                if len(idx) != 0:
                    dfs_dict[asset].drop(labels=idx[0], axis=0, inplace=True)

        current_date += dt.timedelta(days=1)
        print(current_date)
我已经意识到代码在循环中不起任何作用,但如果我同时运行每一部分,它就会起作用。奇怪的事实是,最后一行的打印永远不会起作用

我真的很感谢你的帮助,我目前正在为我的学士学位做最后的项目,我真的在独自奋斗。谢谢!:)


马特奥

我想我解决了。正是
continue
statemet弄乱了循环,并在看到循环后立即退出。尽管如此,如果你有任何可能帮助我加快代码的建议,我非常乐意听取你的意见。非常感谢。