【问题标题】:DataFrame from Dictionary with variable length keys具有可变长度键的字典中的 DataFrame
【发布时间】:2026-01-13 09:25:01
【问题描述】:

因此,对于这项任务,我设法创建了一个字典,其中键是州名(例如:阿拉巴马州、阿拉斯加州、亚利桑那州),值是每个州的地区列表。问题是区域列表的长度不同 - 因此每个州可以有不同数量的关联区域。

Example : 'Alabama': ['Auburn',
  'Florence',
  'Jacksonville',
  'Livingston',
  'Montevallo',
  'Troy',
  'Tuscaloosa',
  'Tuskegee'],
 'Alaska': ['Fairbanks'],
 'Arizona': ['Flagstaff', 'Tempe', 'Tucson'],

如何将其卸载到 pandas Dataframe 中?我想要的基本上是 2 列——“州”、“地区”。类似于您对区域的状态执行“GroupBy”所获得的结果。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果你在 pandas 0.25+ 上工作,你可以使用explode

    pd.Series(states).explode()
    

    输出:

    Alabama          Auburn
    Alabama        Florence
    Alabama    Jacksonville
    Alabama      Livingston
    Alabama      Montevallo
    Alabama            Troy
    Alabama      Tuscaloosa
    Alabama        Tuskegee
    Alaska        Fairbanks
    Arizona       Flagstaff
    Arizona           Tempe
    Arizona          Tucson
    dtype: object
    

    您也可以使用适用于大多数pandas 版本的concat

    pd.concat(pd.DataFrame({'state':k, 'Region':v}) for k,v in states.items())
    

    输出:

         state        Region
    0  Alabama        Auburn
    1  Alabama      Florence
    2  Alabama  Jacksonville
    3  Alabama    Livingston
    4  Alabama    Montevallo
    5  Alabama          Troy
    6  Alabama    Tuscaloosa
    7  Alabama      Tuskegee
    0   Alaska     Fairbanks
    0  Arizona     Flagstaff
    1  Arizona         Tempe
    2  Arizona        Tucson
    

    【讨论】:

    • 非常感谢,我使用了第二个变体! (.explode() 似乎不适用于 coursera)
    【解决方案2】:

    您也可以通过将字典分成列表来做到这一点。虽然这将是一个更长的方法。例如:

    Example = {'Alabama': ['Auburn','Florence','Jacksonville','Livingston','Montevallo','Troy','Tuscaloosa','Tuskegee'],
    'Alaska': ['Fairbanks'],
     'Arizona': ['Flagstaff', 'Tempe', 'Tucson']}
    
    new_list_of_keys = []
    new_list_of_values = []
    
    keys = list(Example.keys())
    values = list(Example.values())
    
    for i in range(len(keys)):
      for j in range(len(values[i])):
        new_list_of_values.append(values[i][j])
        new_list_of_keys.append(keys[i])
    
    df = pd.DataFrame(zip(new_list_of_keys, new_list_of_values), columns = ['State', 'Region'])
    

    这将给出如下输出:

       State        Region
    0   Alabama        Auburn
    1   Alabama      Florence
    2   Alabama  Jacksonville
    3   Alabama    Livingston
    4   Alabama    Montevallo
    5   Alabama          Troy
    6   Alabama    Tuscaloosa
    7   Alabama      Tuskegee
    8    Alaska     Fairbanks
    9   Arizona     Flagstaff
    10  Arizona         Tempe
    11  Arizona        Tucson
    

    【讨论】: