【问题标题】:joining multiple pandas dataframe加入多个熊猫数据框
【发布时间】:2021-07-13 14:38:39
【问题描述】:

我存储了 2000 个熊猫数据框。每个数据框的大小为 (X,2),其中 X 可以是任何大于 100 的正整数。例如:

##Dataframe 1

entry.          feature
entry1            716
entry2            373
entry3            837 

##Dataframe 2

entry.          feature
entry1            173
entry2             0
entry4            981
entry5            717

##Dataframe 2

entry.          feature
entry1            716
entry5            736

我希望最终的数据框看起来像:

##Dataframe 1

entry.          Dataframe1.        DataFrame2         Dataframe3
entry1            716                 173                716
entry2            373                  0                  0
entry3            837                  0                  0
entry4             0                  981                 0
entry5             0                  717                736

所以我想要实现的是我想在入口列的基础上加入这些数据框。如果数据帧中不存在给定条目,例如数据帧 3 中不存在条目 2,那么我想将值设置为 0。如何使用我拥有的 2000 个数据帧来实现这一目标?我们将不胜感激。

【问题讨论】:

  • 它们是如何存储的?在字典里?列表?
  • 看起来你的数据框是相当系列的,不是吗?
  • 我所有的数据框都存储为 csv 文件。
  • 文件名中是否有模式?请提供一些细节
  • 模式是什么意思?

标签: python-3.x pandas numpy-ndarray


【解决方案1】:

您可以使用pandas.concat 和axis=1 选项按列连接:

pd.concat([df1, df2, df3], axis=1)

如果数据存储在磁盘上的文件中,假设它们被命名为/tmp/dfXXX.csv,那么你使用glob模块结合pandas.read_csv:

from glob import glob

files = glob('/tmp/df*.csv') 
df = pd.concat({f: pd.read_csv(f, sep='\s+', index_col=0)['feature']
                for f in files}, axis=1).fillna(0).astype(int)

输出:

        /tmp/df1.csv  /tmp/df2.csv  /tmp/df3.csv
entry1           716           173           716
entry2           373             0             0
entry3           837             0             0
entry4             0           981             0
entry5             0           717           736

注意。我在这里使用 '\s+' 作为分隔符,但这可能会有所不同,具体取决于 csv 文件的实际分隔符

【讨论】:

  • 但是我有 2000 个数据框
  • 它们是如何存储的?在文件上?在列表中?
  • 存储为 csv 文件。
  • 我想要 0 而不是 Nan。
  • 这是你想要的吗?
【解决方案2】:

你可以使用 pd.merge df3_merged = pd.merge[df1, df2]

即使您可以使用左连接或右连接。 df3_merged = pd.merge[df1, df2, how = 'left']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2019-01-07
    相关资源
    最近更新 更多