如何在数据框中使用 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)
我知道 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)