Pandas split column of lists into multiple columns

后端 未结 8 1664
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-21 06:28

I have a pandas DataFrame with one column:

import pandas as pd

df = pd.DataFrame(
    data={
        \"teams\": [
            


        
8条回答
  •  再見小時候
    2020-11-21 07:14

    The above solutions didn't work for me since I have nan observations in my dataframe. In my case df2[['team1','team2']] = pd.DataFrame(df2.teams.values.tolist(), index= df2.index) yields:

    object of type 'float' has no len()
    

    I solve this using list comprehension. Here the replicable example:

    import pandas as pd
    import numpy as np
    d1 = {'teams': [['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],
                ['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG']]}
    df2 = pd.DataFrame(d1)
    df2.loc[2,'teams'] = np.nan
    df2.loc[4,'teams'] = np.nan
    df2
    

    output:

            teams
    0   [SF, NYG]
    1   [SF, NYG]
    2   NaN
    3   [SF, NYG]
    4   NaN
    5   [SF, NYG]
    6   [SF, NYG]
    
    df2['team1']=np.nan
    df2['team2']=np.nan
    

    solving with list comprehension:

    for i in [0,1]:
        df2['team{}'.format(str(i+1))]=[k[i] if isinstance(k,list) else k for k in df2['teams']]
    
    df2
    

    yields:

        teams   team1   team2
    0   [SF, NYG]   SF  NYG
    1   [SF, NYG]   SF  NYG
    2   NaN        NaN  NaN
    3   [SF, NYG]   SF  NYG
    4   NaN        NaN  NaN
    5   [SF, NYG]   SF  NYG
    6   [SF, NYG]   SF  NYG
    

提交回复
热议问题