首页 > 解决方案 > 在熊猫数据框中查找最新列

问题描述

我正在尝试通过 pandas 数据框将一些 Excel 文件读取/解析到 SQL Server 中。

我需要阅读的 excel 文件不是完全静态的,列名会不时更改,但主要是以相当可预测的方式 - 我只是不确定如何实际捕获它。列的顺序也可以改变。

我需要找到包含最新值/金额的列。

例如,我的 Excel 文件在一段时间内可能看起来像这样:

| ID | Type | Amount May 20 | Amount Mar20   |
|----|------|---------------|----------------|
|  1 | red  |          1000 |            998 |
|  2 | blue |           400 |            400 |

那么下一个 Excel 文件可能如下所示:

| ID | Type | Amount May20  | Amount July 20 |
|----|------|---------------|----------------|
|  1 | red  |          1000 |           1050 |
|  2 | blue |           400 |            410 |

如您所见,有时月份拼写完整,月份和年份之间有一个空格,有时它可以用短格式拼写,只有前三个字母直接跟在年份后面。月份和年份之间是否有空格是任意的 - 如果月份是否拼写出来也是任意的。

同样如您所见,最新的列是任意放置的,有时第一个数量是最新的,有时不是(某些文件可能包含多个句点数量)。

关于如何确定哪一列包含最新值的任何建议?即在第一个示例中为第 3 列,在第二个示例中为第 4 列。

标签: pythonpandas

解决方案


您可以使用它来比较它NumPy以获取更改的列号。

说,今天你得到了 dataframe df。因此,将其保存在文件中:

import numpy as np
prev = df.values
np.save('prev.npy', prev)

现在,一个月后,你得到了新的 dataframe new_df。然后加载先前保存的值并使用以下方法进行比较:

import numpy as np
prev = np.load('prev.npy')
new = new_df.values
print(np.where((prev==new)==False)[1])
# Output: array([3], dtype=int64

# Now save this new dataframe 
np.save('prev.npy', new)

第一次,您必须运行第一个代码片段。从那时起,第二个代码片段将为您提供更改的列号。

注意:提供您自己的位置来存储值。确保您不会意外删除该位置。


推荐阅读