【问题标题】:create pandas dataframe from uneven data从不均匀的数据创建熊猫数据框
【发布时间】:2016-09-23 05:13:17
【问题描述】:

我正在使用 python 2.7 中包含年度数据和终身数据的数据集。我有一个存储终身数据的字典,以及一个年度数据的内部 DataFrame。所以它看起来像

Bear1
{'color':'brown',
'grown_size':'7ft',
'stats': df1}
}

数据框“df1”的构建位置如下:

meals      children    territory
4          5              8
2          4              6
5          2              7

我想得到一个矩形的数据框,每一行都有不同的年份数据以及所有的终身统计数据,所以这会变成这样:

color     grow_size    meals      children    territory
brown       7ft        4          5           8
brown       7ft        2          4           6
brown       7ft        5          2           7

我认为这需要类似于 pandas 中的 Series.repeat() 方法,尽管这对我来说还没有用。实现这一目标的最快方法是什么,因为有许多不同年龄的熊!

编辑 不幸的是,我发现我的问题有问题。年度数据已经在数据框内,而不是在字典内!

我为此尝试了以下代码:

 pd.DataFrame.from_dict(bears['bear1'])

'bears['bear1']' 是上面发布的字典,但我收到以下消息:

  File "<stdin>", line 1, in <module>
  File "/Users/masongardner/Library/Python/2.7/lib/python/site-        packages/pandas/core/frame.py", line 226, in __init__
    mgr = self._init_dict(data, index, columns, dtype=dtype)
  File "/Users/masongardner/Library/Python/2.7/lib/python/site-packages/pandas/core/frame.py", line 363, in _init_dict
    dtype=dtype)
  File "/Users/masongardner/Library/Python/2.7/lib/python/site-packages/pandas/core/frame.py", line 5158, in _arrays_to_mgr
    index = extract_index(arrays)
  File "/Users/masongardner/Library/Python/2.7/lib/python/site-packages/pandas/core/frame.py", line 5197, in extract_index    

ValueError: 如果使用所有标量值,则必须传递索引

谢谢!

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    使用from_dict:

    In [20]:
    d={'color':'brown',
    'grown_size':'7ft',
    'stats': {2007:[1,5,7,2],
            2008:[5,3,4,5],
            2009:[5,2,6,7]}
    }
    pd.DataFrame.from_dict(d)
    
    Out[20]:
          color grown_size         stats
    2007  brown        7ft  [1, 5, 7, 2]
    2008  brown        7ft  [5, 3, 4, 5]
    2009  brown        7ft  [5, 2, 6, 7]
    

    pd.DataFrame(d) 也可以使用

    【讨论】:

    • 不幸的是通过这个方法,收到如下信息ValueError: If using all scalar values, you must pass an index
    • 您需要在失败的地方发布相关数据和代码
    • @EdChum from_records 呢?我已经使用 from_records 修复了这个索引问题...
    • 更新熊猫后,我意识到我的内部字典已经是一个数据框。所以我实际上有一个包含终身数据的字典,其中还包含一个包含年度数据的数据框
    • 您需要发布示例数据以显示您的 dict 实际外观,您可以连接 dfs pd.concat(d.items())
    【解决方案2】:

    编辑

    这是一个简单的方法,可以让一只熊得到你想要的东西。

    # recreating your data
    d = {'meals':[4,2,5], 'children':[5,4,2], 'territory':[8,6,7]}  
    bear1 = {'color':'brown',
            'grown_size':'7ft',
            'stats': DataFrame(d)}
    
    
    def bear_to_df(bear_dict):
        df = bear_dict['stats']
        for (k,v) in bear_dict.iteritems():
            if k == 'stats':
                pass
            else:
                df[k] = v
        return df
    
    In [32]: bear_to_df(bear1)
    Out[32]: 
       children  meals  territory  color grown_size
    0         5      4          8  brown        7ft
    1         4      2          6  brown        7ft
    2         2      5          7  brown        7ft
    

    你有多少只熊?如果你想在同一个 DataFrame 中连接所有熊的数据,请使用 pandas.concat

    【讨论】:

    • 我使用的是 0.18.1,尽管我对帖子进行了更改,因为我意识到我有一个值字典并且包含一个数据框(与前面所述的字典中的字典相反)
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2022-08-14
    • 2021-06-02
    • 2020-01-04
    • 2018-11-04
    • 2021-10-31
    • 2014-11-22
    相关资源
    最近更新 更多