Python Pandas convert column data type

后端 未结 2 1978
盖世英雄少女心
盖世英雄少女心 2021-01-24 02:48

I know a question like this has been asked zillion types, but so far I have not been able to find an answer to this question.

I have joined two .csv files together with

相关标签:
2条回答
  • 2021-01-24 03:39

    As with @EdChum's comment, you need to use clip(upper=13) or clip_upper(13). One other option which can help you in the long run with instances like this is to use apply with a lambda function. This is a really nifty all-around method.

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.randint(5,18,size=(5, 4)), columns=list('ABCD'))
    nscap = lambda x: min(x, 13)
    
    print df.head()
    print '-' * 20
    
    df['NSCAP'] = df['D'].apply(nscap)
    
    print df.head()
    

    Result:

    Take note of the last 2 lines of the second dataframe.

    Hope this helps.

    0 讨论(0)
  • 2021-01-24 03:44

    (Your code is missing a parenthesis at the end of nscap(df_joined["NS"].)

    As @EdChum and @TheLaughingMan write, clip_upper is what you want here. This answer just addresses the direct reason for the error you're getting.

    In the function

    def nscap(ns):
        if ns <= 13:
            x = ns
        elif ns > 13:
            x = 13
        return x
    

    effectively, ns <= 13 operations on a numpy.ndarray. When you compare such an array to a scalar, broadcasting takes place, and the result is an array where each element indicates whether it was true for it or not.

    So

    if ns <= 13:
    

    translates to something like

    if numpy.array([True, False, True, True]):
    

    and it's impossible to understand whether this is true or not. That's the error you're getting: you need to specify whether you mean if all entries are true, if some entry is true, and so on.

    0 讨论(0)
提交回复
热议问题