熊猫:使用回调转换为数字

时间:2018-03-30 09:43:23

标签: python pandas dataframe

我正在转换专栏和使用以下任一项将数据帧的单元格值设置为float64:

print(cardTemplate)

df.infer_objects()

第一个将这些列保留为不可转换的对象类型,而第二个列则在某些对象无法转换时引发异常。我的问题是,如果以某种方式可以提供我自己的错误/转换器回调函数?像这样:

df.apply(pd.to_numeric)

1 个答案:

答案 0 :(得分:0)

我不知道如何简明扼要地完成你的要求。这对api来说是一个很好的补充。这是有用的东西,有点令人费解。

pd.to_numeric方法设置为不引发异常,而是使用errors参数返回NaN。使用您的NaN apply您的特殊转换器功能的位置。现在使用add和参数fill_value=0添加使用pd.to_numeric和特殊转换器转换的DataFrame。

您可以在to_numericadd

的文档中找到一些信息

它看起来像这样。

import pandas as pd
import numpy as np


df = pd.DataFrame({ 'A': np.random.randn(5),
                    'B': np.random.randn(5)})

    A           B
0   -0.619165   1.310489
1   0.908564    1.017284
2   0.046072    -1.059349
3   1.123730    -2.229261
4   0.689580    -0.200981

df1 = df[df < 1] # This is your DataFrame from df.apply(pd.to_numeric, errors='coerce')
df1

    A           B
0   -0.619165   NaN
1   0.908564    NaN
2   0.046072    -1.059349
3   NaN         -2.229261
4   0.689580    -0.200981

df2 = df[df1.isnull()] 
df2 # This is the DataFrame you want to apply your converter df2.apply(my_converter)
df2 = df2.apply(lambda x: x*10) # This is my dummy special converter
df2

    A           B
0   NaN         13.104885
1   NaN         10.172835
2   NaN         NaN
3   11.237296   NaN
4   NaN         NaN

df1.add(df2, fill_value=0) # This is the final dataframe you're looking for

    A           B
0   -0.619165   13.104885
1   0.908564    10.172835
2   0.046072    -1.059349
3   11.237296   -2.229261
4   0.689580    -0.200981