迭代空白电子表格时如何将占位符插入聚合的df

我正在遍历位于主目录中各个文件中的 Excel 电子表格。大多数电子表格如下所示:


df = pd.DataFrame({"A": [1, 2, 3], 

                   "B": [4, 5, 6],

                  "C": [7, 8, 9],

                  "D": [10, 11, 12],

                  "E": [13, 14, 15],

                  "F": [16, 17, 18],

                  "G": [19, 20, 21]})

但是,我的电子表格中有大约 100 个与我填充的电子表格具有相同的名称和列数,但是,没有数据存在。它们看起来像这样:


df2 = pd.DataFrame({"A": [], 

                   "B": [],

                  "C": [],

                  "D": [],

                  "E": [],

                  "F": [],

                  "G": []})

我仍然想“提取”该信息,并为这些空白行插入一个占位符。我的预期结果如下所示:


df3 = pd.DataFrame({"A": [1, 2, 3, NaN],

                   "B": [4, 5, 6, NaN],

                  "C": [7, 8, 9, NaN],

                  "D": [10, 11, 12, NaN],

                  "E": [13, 14, 15, NaN],

                  "F": [16, 17, 18, NaN],

                  "G": [19, 20, 21, NaN]})

目前,我的代码没有使用占位符 (NaN) 填充聚合电子表格。在检查我的 df 是否为空时,我尝试 df.fillna 以及附加 NaN,但是,我仍然没有用我的空电子表格中的 NaN 填充我的聚合 df。这是我到目前为止所写的:


import os

import pandas as pd

pd.options.display.max_rows=999

import numpy

from numpy import NaN


root = "my_dir"


agg_df = pd.DataFrame()


blank_rows = pd.Series([NaN,NaN,NaN,NaN,NaN,NaN,NaN], index=['A', 'B', 'C',

                                                'D', 'E', 

                                                'F', 'G'])


for directory, subdirectory, files in os.walk(root):

#     print(directory)

    for file in files:

        filepath = os.path.join(directory, file)

        print(directory)

        if file == 'Apples.xlsx':

            df_temp = pd.read_excel(filepath, sheet_name = 'Apples')

            df_temp['Filepath'] = filepath

            if df_temp.empty == True:

                df_temp.append(blank_rows, ignore_index = True)         

            agg_df = agg_df.append(df_temp)


千万里不及你
浏览 186回答 1
1回答

白衣染霜花

您创建的 blank_rows 不是一行,而是七行。所以我用 None 值创建了一行(NaN 无效)。然后为 agg_df 添加一个空白行,我使用了 concat。root = ''agg_df = pd.DataFrame()blank_rows = pd.DataFrame(pd.Series([None,None,None,None,None,None,None],                                     index=['A', 'B', 'C',                                                'D', 'E',                                                 'F', 'G'])).transpose()for directory, subdirectory, files in os.walk(root):    for file in files:        filepath = os.path.join(directory, file)        df_temp = pd.read_excel(filepath, sheet_name = 'Apples')        blank_rows['filepath'] = filepath        if file == 'Apples.xlsx':            if df_temp.empty == True:                agg_df = pd.concat([agg_df, blank_rows])结果:     A      B        C      D       E        F      G     filepath0   None    None    None    None    None    None    None  my_dir\Apples.xlsx
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python