python - 在熊猫数据框中查找最新列
问题描述
我正在尝试通过 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 列。
解决方案
您可以使用它来比较它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)
第一次,您必须运行第一个代码片段。从那时起,第二个代码片段将为您提供更改的列号。
注意:提供您自己的位置来存储值。确保您不会意外删除该位置。
推荐阅读
- amazon-web-services - Cloudfront 是否禁用/启用有效地“使”所有文件“无效”?
- javascript - 切换到 websocket 后如何从 Binance 解析数据
- python - 基于 Tensorflow 的变压器中的输入数据错误
- c++ - wxWidgets 遍历注册表项
- php - PHP Composer:“包 paypal/paypalhttp 已被放弃”
- swift - 在 Swift 中,如果局部变量在闭包中使用,它的作用域是什么?
- python - 如何使用 sys.stdin.read() 输入一组用换行符分隔的字符串
- java - 调用 Module32First 给出无效参数(错误代码 87)
- node.js - 数据库结果到 REST PUT
- javascript - 正则表达式不捕获 JavaScript 中的组