【问题标题】:Create a Dataframe from a list and keep duplicate items [duplicate]从列表中创建一个数据框并保留重复项[重复]
【发布时间】:2021-09-21 04:21:32
【问题描述】:

我有一个数据框列表。列表中的每个数据框都是唯一的 - 这意味着有一些共享但不同的列。我想创建一个包含数据框列表中所有列的单个数据框,如果元素不存在,将填充 NaN。我已经尝试了以下

import pandas as pd
df_new = pd.concat(list_of_dfs)
#I get the following: InvalidIndexError: Reindexing only valid with uniquely valued Index objects

问题似乎是由于列表中的数据框。每个数据框只有一行,因此它的索引为零,因此重新索引不会起作用。我试过这个:

 list_of_dfs.append(pd.DataFrame([rows], columns = tags).set_index(np.array(random.randint(0,5000))))

几乎生成一个随机数作为索引。但是,O 得到这个错误:

ValueError: The parameter "keys" may be a column key, one-dimensional array, or a list containing only valid column keys and one-dimensional arrays.

【问题讨论】:

标签: python pandas


【解决方案1】:

试试这个怎么样:

如果您的索引已经是独一无二的,这不应该伤害他们:

df = df.loc[~df.index.duplicated(keep='first')]

而是确保它们是唯一的。您可以将 axis 设置为 index 以确保将索引用作连接的基础:

df_new = pd.concat(list_of_dfs, axis='index')

【讨论】:

  • 我已经用更多信息更新了帖子
【解决方案2】:

你需要在 pd.concat 中使用一些参数:

import pandas as pd

df1 = pd.DataFrame({'a':[1,2,3],'x':[4,5,6],'y':[7,8,9]})
df2 = pd.DataFrame({'b':[10,11,12],'x':[13,14,15],'y':[16,17,18]})

print(pd.concat([df1,df2], axis=0, ignore_index=True))

结果:

     a   x   y     b
0  1.0   4   7   NaN
1  2.0   5   8   NaN
2  3.0   6   9   NaN
3  NaN  13  16  10.0
4  NaN  14  17  11.0
5  NaN  15  18  12.0

所以,像这样使用 concat:

pd.concat(list_of_dfs, axis=0, ignore_index=True)

【讨论】:

  • FWIW pd.concat([df1,df2]) 在此示例中不会引发 InvalidIndexError 并且会按预期工作。
  • @magicarm22 我已经用更多信息更新了帖子
猜你喜欢
  • 2016-12-23
  • 2020-10-29
  • 2022-08-11
  • 2016-10-21
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多