【问题标题】:In Python how do I create a data frame with a list that contains multiple levels of dictionaries?在 Python 中,如何使用包含多级字典的列表创建数据框?
【发布时间】:2015-12-11 23:18:22
【问题描述】:

我是第一次使用 Twython 库。它给了我一个字典类型的对象“数据”。这本词典的字段中有['user'],它是一个子词典。

我创建了这个字典的列表:

tweets=[]
  #Given an object data
  ...some kind of loop....
  tweets.append(data)

一旦我有了它,我就将它转换为数据框:

output = pd.DataFrame(tweets)

这对于第一级词典工作正常,但对于第二级词典,它将它们全部转换为字符串。

理想情况下,我想做的是:

output['user']['screen_name'][1]

而不是

user_info = ast.literal_eval(output['user'][1]))
print user_info['screen_name']

并以本机方式访问数据。目前,我必须使用类似 ast 的东西首先逐行将其转换为另一个字典。有没有更有效的方法来做到这一点?

【问题讨论】:

  • 你为什么要把它放到 DataFrame 中?
  • 因为我想稍微练习一下我的panda技能,而且把同一个字典的N行的数据集放到一个dataframe中似乎合乎逻辑?接受建议,DF 实现不是我的最终目标,我只是想对从 twitter 获取的数据进行一些操作。
  • 我想还有一个更广泛的问题,即如何处理嵌套字典,或者这根本不适合数据框?
  • 没有数据样本不容易回答。但是,您是否尝试过this question 的答案中描述的类似方法?
  • 资料比较长,我试着做个demo吧。我相信我已经尝试了那里提出的一些方法,但没有取得任何成功。明天有空会更新

标签: python dictionary pandas dataframe


【解决方案1】:

我有一个可能的解决方案。我还没有尝试过我的问题的完整数据样本,但我认为这可能有效:

假设我们有两个 DataFrame 对象:

data_one
data_two

我们可以这样操作它:

data_one['index']=data_one.index
data_two['index']=data_two.index

这将为“索引”创建一个新的字典标签。 请注意,这是在很大程度上假设行与您想要的一致。

data_three = pd.merge(data_one,data_two)

由于其他原因,我还没有完全测试它,但对于我的测试用例,它似乎给出了正确的行为。我敢肯定有一种更顺畅的方法可以做到这一点,并且有人会发布一个单行,但如果你在 2020 年阅读这篇文章并且这是唯一的答案,那么有一种方法可以做到!

【讨论】:

  • 我可以确认这种方法是使其发挥作用的一种方法。出于某种原因,我很难让合并正常工作,所以我不得不通过以下方式明确地做到这一点:output = pd.merge(data_one,data_two,left_on='index',right_on='index') 不知道为什么,但它之前返回了一个空合并,现在它返回了预期比例的合并。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多