【问题标题】:How to change dtype of columns inside list如何更改列表中列的 dtype
【发布时间】:2019-08-21 17:26:36
【问题描述】:

我正在尝试计算我有不同 dtype 的列,因为这会产生一个错误,我希望它们都具有相同的 dtype。

Question            object
Very likely         object
Quite likely       float64
Slightly likely     object
Not very likely    float64
Very unlikely       object
Total              float64
dtype: object

我尝试在 lambda 函数中使用 float(x)。

propensity = pd.read_excel(raw_data,'Propensity to buy')
propensity = propensity[['Question','Very likely','Quite likely','Slightly likely','Not very likely',
                          'Very unlikely','Total']]

propensity['MEAN'] = 
sum(
    [
        propensity['Very likely'].apply(lambda float(x): x*4),

        propensity['Quite likely'].apply(lambda float(x): x*3),

        propensity['Slightly likely'].apply(lambda float(x): x*2),

        propensity['Not very likely'].apply(lambda float(x): x*1),

        propensity['Very unlikely'].apply(lambda float(x): x*0)
    ]
)             

得到的结果是SyntaxError: invalid syntax

【问题讨论】:

  • lambda <argument_names>: <do_work> 你的语法没有意义,因为你试图在“错误的一面”上“工作”。话虽如此,您应该正在探索如何更改熊猫列的类型,您不需要使用.apply

标签: python pandas dataframe multiple-columns dtype


【解决方案1】:

应该是

df['column_name'].apply(lambda x: float(x) * 4)

而不是

df['column_name'].apply(lambda float(x): x*4)

【讨论】:

    【解决方案2】:

    您可以通过在从源读取数据时转换列来实现这一点:
    例如:

    pd.read_excel('file_name', dtype={'Very likely': 'float64', 'Quite likely': 'float64', 'Slightly likely': 'float64', 'Not very likely': 'float64', 'Very unlikely': 'float64'})
    

    【讨论】:

    【解决方案3】:

    您是否尝试过使用df['column_name'].astype(int)?如果您希望评估某些列,可以创建一个 for 循环:

    cols = ['column_1','column_2','column_3','column_n']
    for col in cols:
        df[col] = df[col].astype('int') 
    

    或使用 dtype 作为条件:

    if df['column_1'].dtype == object:
        print("this column contains is dtype object")
    else:
        print("it is dtype is not object")
    

    一旦将它们设置为 int 或 float,您就可以执行常规计算。

    【讨论】:

    • 您好,据我了解,对于 cols = ['column_1','column_2','column_3','column_n'] for cols: df[col] = df[col].astype ('int') 我只需要更改我的数据框名称的 df 并将 col 保留原样吗?我问是因为这是我正在做的事情,并且我收到一个错误“invalid literal for int() with base 10:”
    猜你喜欢
    • 2020-04-17
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2011-04-23
    • 2018-10-14
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多