目前我正在使用一个历史数据库(在MS Access中),其中包含通过声音(丹麦和瑞典之间的海峡)的船只通道。
我遇到了记录船上产品数量的问题。这通常采用以下形式:
12 1/15(整数 - 空格 - 分数)
1/4(分数)
1(整数)
我想将所有这些数字转换为浮点数/小数,以便进行一些计算。还有一些额外的挑战主要是由于缺乏统一的投入:
- 并非所有行都有值
- 有些行有值:' - ',我想跳过这些
- 当缺少数字或部分数字时,某些行包含'*',这些行也可以跳过
我的第一个问题是:有没有办法在Access SQL中直接转换它?我找不到任何东西,但也许我忽略了一些东西。
我尝试的第二个选项是导出表(称为货物),使用python转换值然后输出它并再次导入表。我有一个转换标准三种格式的功能:
from fractions import Fraction
import pandas
import numpy
def fracToString(number):
conversionResult = float(sum(Fraction(s) for s in number.split()))
return conversionResult
df = pandas.read_csv('cargo.csv', usecols = [0,5], header = None, names = ['id_passage', 'amount'])
df['amountDecimal'] = df['amount'].dropna().apply(fracToString)
这适用于空行,但是包含'*'或' - '的值或fractToString函数无法处理的其他字符会引发ValueError。由于这些只是超过400万的记录,因此可以省略。如果fracToString函数抛出ValueError,有没有办法告诉pandas.apply()只跳到下一行?
提前谢谢你,
亚历