我有大量必须加载的 .xlsm 文件。每个 Excel 文件有 6 个工作表。因此,我使用 pandas 打开每个 Excel 文件:
for excel_file in files_list:
with pd.ExcelFile(excel_file, engine = "openpyxl") as f:
df1 = pd.read_excel(f, "Sheet1")
df2 = pd.read_excel(f, "Sheet2")
df3 = pd.read_excel(f, "Sheet3")
...
Run Code Online (Sandbox Code Playgroud)
每次迭代之后,我将 df 传递给其他函数并用它做一些事情。我习惯pd.ExcelFile将文件加载到内存中一次,然后将其分离到 DataFrame 上。
但是,执行此操作时,我收到以下警告:
/opt/anaconda3/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py:300: UserWarning: Data Validation extension is not supported and will be removed
warn(msg)
Run Code Online (Sandbox Code Playgroud)
无论警告如何,信息都会从 Excel 文件中正确加载,并且不会丢失任何数据。将每个 Excel 文件及其所有工作表加载到 df 中大约需要 0.8 秒。如果我使用 pandas 上的默认引擎来加载每个 Excel 文件,警告就会消失,但每个文件所需的时间会增加到 5 甚至 6 秒。
我看到了这篇文章,但没有关于如何删除警告的答案,这正是我所需要的,因为一切正常。
我怎样才能禁用所述用户警告?
我有一个从 txt 文件导入的 DataFrame,其结构如下:
ID Place Name Other
0 123456789 1100 NAME1 5468.85
1 NUMBER1 1100 DESCRIPTION1
2 STR1 DESCRIPTION2
3 NUMBER2 OTHER_STR
4 987654321 1100 NAME2 4566.65
1 NUMBER1 1100 DESCRIPTION1
2 STR1 DESCRIPTION2
Run Code Online (Sandbox Code Playgroud)
我想检查类似下面的代码,但我知道迭代 df 是一种不好的做法,而且我不是 Pandas 专家:
for row in df:
if row['Other'] == '' or row['Place'] == '':
row['ID'] == previous_row['ID']
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
ID Place Name Other
0 123456789 1100 NAME1 5468.85
1 123456789 1100 DESCRIPTION1
2 123456789 DESCRIPTION2
3 123456789 OTHER_STR
4 987654321 1100 NAME2 4566.65 …Run Code Online (Sandbox Code Playgroud)