【问题标题】:How to convert string into float value in the dataframe如何将字符串转换为数据框中的浮点值
【发布时间】:2015-05-08 10:07:20
【问题描述】:

当我们有一个数据类型为字符串且值如 col1 col2 1 .89

所以,当我们使用

def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print('Input pandas.DataFrame #1:')
    import pandas as pd
    import numpy as np
    from sklearn.kernel_approximation import RBFSampler
    x =dataframe1.iloc[:,2:1080]
    print x
    df1 = dataframe1[['colname']]

    change = np.array(df1)
    b = change.ravel()
    print b
    rbf_feature = RBFSampler(gamma=1, n_components=100,random_state=1)
    print rbf_feature
    print "test"
    X_features = rbf_feature.fit_transform(x)

在此之后我们得到错误,因为无法将非 int 转换为浮点类型

【问题讨论】:

    标签: python azure pandas azure-machine-learning-studio


    【解决方案1】:

    使用astype(float) 例如:

    df['col'] = df['col'].astype(float)
    

    convert_objects:

    df = df.convert_objects(convert_numeric=True)
    

    例子:

    In [379]:
    
    df = pd.DataFrame({'a':['1.23', '0.123']})
    df.info()
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 2 entries, 0 to 1
    Data columns (total 1 columns):
    a    2 non-null object
    dtypes: object(1)
    memory usage: 32.0+ bytes
    In [380]:
    
    df['a'].astype(float)
    Out[380]:
    0    1.230
    1    0.123
    Name: a, dtype: float64
    
    In [382]:
    
    df = df.convert_objects(convert_numeric=True)
    df.info()
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 2 entries, 0 to 1
    Data columns (total 1 columns):
    a    2 non-null float64
    dtypes: float64(1)
    memory usage: 32.0 bytes
    

    更新

    如果您正在运行版本 0.17.0 或更高版本,则 convert_objects 已替换为以下方法:to_numericto_datetimeto_timestamp,而不是:

    df['col'] = df['col'].astype(float)
    

    你可以这样做:

    df['col'] = pd.to_numeric(df['col'])
    

    请注意,默认情况下,任何不可转换的值都会引发错误,如果您希望将这些值强制为NaN,请执行以下操作:

    df['col'] = pd.to_numeric(df['col'], errors='coerce')
    

    【讨论】:

    • float() 的无效文字:0.00|当我们更改代码时 x =dataframe1.iloc[:,2:100].astype(float) df1 = dataframe1[['StateCode']].asastype(float)
    • 你有 duff 数据,你能将原始输入数据发布到你的问题中
    • @EdChum 我有一个与您的代码相关的后续问题。我尝试了df['a'].astype(float),它有效,即将所有这两个条目从字符串转换为浮点数。但是,如果我输入 df['a'][1].astype(float),它会给我一个 AttributeError:'str' 对象没有属性 'astype'。为什么会发生?整个系列都可以转换,但不是每个条目都可以转换?
    • @ftxx 因为 astype 是系列方法而不是 str 的方法,所以即使它是 int 也会失败。您正在尝试在单个 str 而不是系列上调用 astype
    猜你喜欢
    • 2023-03-12
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多