我目前正在试验新的pint-pandas库,并且仍在开发中。
我尝试使用pandas
apply()
函数一次设置几列,其中列为PintArray
。这是一个最小的工作示例:
import pandas as pd
import pint
ureg = pint.UnitRegistry()
pint.PintType.ureg = ureg
def f(x):
return x+1*ureg.day, x+2*ureg.day
def g(x):
return x+1, x+2
print('First try/except block')
try:
df1 = pd.DataFrame({'A':pd.Series([1,2,3,4], dtype='pint[day]'),'B':pd.Series([5,6,7,8], dtype='pint[day]')})
df1['C'], df1['D'] = zip(*df1['A'].apply(f))
except Exception as e:
print(e)
print('Second try/except block')
try:
df2 = pd.DataFrame({'A':pd.Series([1,2,3,4]),'B':pd.Series([5,6,7,8])})
df2['C'], df2['D'] = zip(*df2['A'].apply(g))
except Exception as e:
print(e)
第二个try / except块不会引发任何异常,这意味着该方法可用于纯pandas
。第一个try / except块引发以下异常:
setting an array element with a sequence.
为什么会这样?有解决方法吗?谢谢。