【问题标题】:Pandas: Adding row by row while iterating a dictionaryPandas:在迭代字典时逐行添加
【发布时间】:2015-01-29 21:07:55
【问题描述】:

我有两个大字典,其中列表具有值。出于这个问题的目的,我将它们命名为字典 foo 和 bar。

foo = {}
foo['a'] = []
foo['b'] = []
foo['a'].append(1)
foo['a'].append(2)
foo['b'].append(10)
foo['b'].append(30)

bar = {}
bar['a'] = []
bar['a'].append(5)
bar['a'].append(7)
bar['b'] = []
bar['b'].append(8)
bar['b'].append(34)
bar['b'].append(32)

通过迭代一个字典,我想构建一个数据框,它将让我获得以下数据表:

id | viewed | presented
-----------------------
a  | [1,2]  | [5,7]
-----------------------
b  | [10,30]| [8,32,34]

所以我做了以下事情:

import pandas as pd
df = pd.DataFrame(columns=['id', 'viewed', 'presented'])
for item in foo:
    df = pd.Series({'id':item, 'viewed':foo[item], 'presented':bar[item]})

但是当我打印我的数据框时,它缺少foo[a]bar[a] 的结果

>>> df
id                     b
presented    [8, 34, 32]
viewed          [10, 30]
dtype: object
>>> len(df.index)
3

看起来它被覆盖而不是增加数据框的索引来记录下一个元素。在这种情况下,解决此问题并根据需要逐行插入的最佳方法是什么。我查看了另外两个 stackoverflow 问题,都没有解决方案。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您需要做的就是:

    df = pd.DataFrame({'viewed':foo, 'presented':bar}).reset_index()
    df.columns = ['id', 'viewed', 'presented']
    

    你会得到想要的数据框:

       id    viewed    presented
    0  a    [1, 2]       [5, 7]
    1  b  [10, 30]  [8, 34, 32]
    

    【讨论】:

    • 这样 id 会是数据框的索引吧?我不想要。我希望那是一个专栏。
    • 只是为了清楚我不需要遍历字典?正如我在问题中所做的那样?
    • @Null-Hypothesis 不,您不需要这样做,因为您已经将数据构建为字典,Pandas.DataFrame 可以推断您的意思是从该字典构建。 Pandas 还有一个Pandas.DataFrame.from_dict(...) 功能,您可以在文档中查看 -->pandas.pydata.org/pandas-docs/dev/generated/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多