如何在数据框中使用 math.modf?

How can you use math.modf in a dataframe?

我知道 math.modf returns 是一个字符串,因为它是 C 语言标准的包装器,但这意味着我在尝试添加浮点数时遇到错误 TypeError: cannot convert the series to <class 'float'>作为我的数据框的一列。这是我的代码:

dataset = pd.read_csv('scandi_short.csv', error_bad_lines=False, 
                  names=['Bloomberg Code', 'index', 'Bid Price', 'Ask Price', 'Trade Price','Bid Volume','Ask Volume','Trade Volume','Update type','Change to Ask','Date','Time in seconds past midnight','Opening price','Condition codes','na','na2'])
dataset['Trade price float'] = int(math.modf(dataset['Trade Price']))
print(dataset)

如您所见,我已尝试将 math.modf 函数设为整数,但我仍然遇到相同的错误,请帮忙!

错误:TypeError: cannot convert the series to <class 'float'> 是因为您正在将系列传递给 math.modf,所以您需要...

a) apply() Series 中每个元素的函数:

import math
import numpy as np
import pandas as pd

s = pd.Series([1.5, 2.3, 4.0])

res = s.apply(math.modf)
print(res)

输出

0                   (0.5, 1.0)
1    (0.2999999999999998, 2.0)
2                   (0.0, 4.0)
dtype: object

或:

b) 最好使用矢量化的 numpy.modf

import math
import numpy as np
import pandas as pd

s = pd.Series([1.5, 2.3, 4.0])

res_np = pd.Series(zip(*np.modf(s)))
print(res_np)

输出

0                   (0.5, 1.0)
1    (0.2999999999999998, 2.0)
2                   (0.0, 4.0)
dtype: object

c) 更新:如果你只需要第一个(整数)部分,你可以这样做:

res = s.apply(lambda x: math.modf(x)[0])
print(res)

res_np, _ = np.modf(s)
print(res_np)