代码之家  ›  专栏  ›  技术社区  ›  Jim Macaulay

在pandas DataFrame中转换列

  •  0
  • Jim Macaulay  · 技术社区  · 10 月前

    我有一个下面的数据框,我试图根据Place列转置数据。对于Place列中的每个值列表,我需要生成每一行。

    Language   Capital   Place
    Tamil      Chennai   ['Chennai', 'Vellore', 'Trichy', 'Madurai']
    Kerala     Kochi     ['Kochi', 'Trivandrum']
    

    预期结果

    Language     Capital     Place
    Tamil        Chennai     Chennai
    Tamil        Chennai     Vellore
    Tamil        Chennai     Trichy
    Tamil        Chennai     Madurai 
    Kerala       Kochi       Kochi
    Kerala       Kochi       Trivandrum
    

    我尝试了很多方法,使用pandas转置,都无法得到预期的结果。 我还检索了Place列并将其转换为一系列数据帧,但仍然无法得到结果。

    任何建议都将不胜感激

    1 回复  |  直到 10 月前
        1
  •  2
  •   Dmitry543    10 月前

    使用ast.literal_eval将字符串表示形式转换为实际列表:

    import ast
    df['Place'] = df['Place'].apply(ast.literal_eval)
    

    将“Place”中的每个列表元素转换为单独的行,复制其他列值,并重置DataFrame的索引进行清理:

    df_exploded = df.explode('Place').reset_index(drop=True)
    print(df_exploded)
    
        2
  •  0
  •   isdabenx    10 月前

    您可以通过使用pandas库的explode()函数来实现这一点,该函数将类似列表的列的每个元素转换为行,复制其他列的值。

    import pandas as pd
    
    # Sample data
    data = {
        'Language': ['Tamil', 'Kerala'],
        'Capital': ['Chennai', 'Kochi'],
        'Place': [['Chennai', 'Vellore', 'Trichy', 'Madurai'], ['Kochi', 'Trivandrum']]
    }
    
    # Create DataFrame
    df = pd.DataFrame(data)
    
    # Use explode to generate one row for each place in the 'Place' column
    df_exploded = df.explode('Place')
    
    # Display the result
    print(df_exploded)