遍历空白电子表格时如何在占位df中插入占位符

时间:2019-04-22 16:35:42

标签: python

我正在遍历位于主目录中各个文件中的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)

1 个答案:

答案 0 :(得分:0)

您创建的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     filepath
0   None    None    None    None    None    None    None  my_dir\Apples.xlsx
相关问题