从不均匀的数据创建pandas数据帧

时间:2016-05-25 14:15:37

标签: python python-2.7 pandas dataframe

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

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()方法,尽管这对我来说还没有用。什么是实现这一目标的最快方法,因为有许多这样的熊具有不同的年龄!

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

我为此尝试了以下代码:

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

'bear ['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:如果使用所有标量值,则必须传递索引

谢谢!

2 个答案:

答案 0 :(得分:0)

使用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)也可以使用

答案 1 :(得分:0)

修改

这是一种简单的方法,可以让你拥有一只熊。

def create_list_sets(lst, n):
    j = len(lst)
    res = []
    if n > j:
        n = j
    for k in range(j - n + 1)
        res.append(lst[k:k+n])
    return res
你有多少只熊?如果你想在同一个DataFrame中连接所有熊和数据,请使用pandas.concat