将多个 .txt 文件合并为 csv

2024-03-30

*Python 新手。

我正在尝试将多个文本文件合并为 1 个 csv;下面的例子 -

文件名.csv

Alpha

0
0.1
0.15
0.2
0.25
0.3

文本1.txt

Alpha,Beta
0,10
0.2,20
0.3,30

文本2.txt

Alpha,Charlie
0.1,5
0.15,15

文本3.txt

Alpha,Delta
0.1,10
0.15,20
0.2,50
0.3,10

csv 文件中所需的输出:-

文件名.csv

Alpha  Beta  Charlie  Delta
  0     10     0        0
  0.1    0     5        10
  0.15   0     15       20
  0.2   20     0        50
  0.25   0     0        0
  0.3   30     0        10

我一直在使用的代码和提供的其他代码给了我类似于页面底部的答案

def mergeData(indir="Dir Path", outdir="Dir Path"):
    dfs = []
    os.chdir(indir)
    fileList=glob.glob("*.txt")
    for filename in fileList:
        left= "/Path/Final.csv"
        right = filename
        output = "/Path/finalMerged.csv"
        leftDf = pandas.read_csv(left)
        rightDf = pandas.read_csv(right)
        mergedDf = pandas.merge(leftDf,rightDf,how='inner',on="Alpha", sort=True)
        dfs.append(mergedDf)
    outputDf = pandas.concat(dfs, ignore_index=True)
    outputDf = pandas.merge(leftDf, outputDf, how='inner', on='Alpha', sort=True, copy=False).fillna(0)
    print (outputDf)

    outputDf.to_csv(output, index=0)

mergeData()

然而我得到的答案并不是期望的结果:-

Alpha  Beta  Charlie  Delta
  0     10     0        0
  0.1    0     5        0
  0.1    0     0        10
  0.15   0     15       0
  0.15   0     0        20
  0.2   20     0        0
  0.2    0     0        50
  0.25   0     0        0
  0.3   30     0        0
  0.3    0     0        10

IIUC 您可以创建所有列表DataFrames - dfs, 循环追加mergedDf最后concat http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html all DataFrames to one:

import pandas
import glob
import os

def mergeData(indir="dir/path", outdir="dir/path"):
    dfs = []
    os.chdir(indir)
    fileList=glob.glob("*.txt")
    for filename in fileList:
        left= "/path/filename.csv"
        right = filename
        output = "/path/filename.csv"
        leftDf = pandas.read_csv(left)
        rightDf = pandas.read_csv(right)
        mergedDf = pandas.merge(leftDf,rightDf,how='right',on="Alpha", sort=True)
        dfs.append(mergedDf)
    outputDf = pandas.concat(dfs, ignore_index=True)
    #add missing rows from leftDf (in sample Alpha - 0.25) 
    #fill NaN values by 0
    outputDf = pandas.merge(leftDf,outputDf,how='left',on="Alpha", sort=True).fillna(0)
    #columns are converted to int
    outputDf[['Beta', 'Charlie']] = outputDf[['Beta', 'Charlie']].astype(int) 
    print (outputDf)

    outputDf.to_csv(output, index=0)

mergeData()

   Alpha  Beta  Charlie
0   0.00    10        0
1   0.10     0        5
2   0.15     0       15
3   0.20    20        0
4   0.25     0        0
5   0.30    30        0

EDIT:

问题是你改变了参数how='left'在第二个merge to how='inner':

def mergeData(indir="Dir Path", outdir="Dir Path"):
    dfs = []
    os.chdir(indir)
    fileList=glob.glob("*.txt")
    for filename in fileList:
        left= "/Path/Final.csv"
        right = filename
        output = "/Path/finalMerged.csv"
        leftDf = pandas.read_csv(left)
        rightDf = pandas.read_csv(right)
        mergedDf = pandas.merge(leftDf,rightDf,how='inner',on="Alpha", sort=True)
        dfs.append(mergedDf)
    outputDf = pandas.concat(dfs, ignore_index=True)
    #need left join, not inner
    outputDf = pandas.merge(leftDf, outputDf, how='left', on='Alpha', sort=True, copy=False)
                     .fillna(0)
    print (outputDf)

    outputDf.to_csv(output, index=0)

mergeData()
   Alpha  Beta  Charlie  Delta
0   0.00  10.0      0.0    0.0
1   0.10   0.0      5.0    0.0
2   0.10   0.0      0.0   10.0
3   0.15   0.0     15.0    0.0
4   0.15   0.0      0.0   20.0
5   0.20  20.0      0.0    0.0
6   0.20   0.0      0.0   50.0
7   0.25   0.0      0.0    0.0
8   0.30  30.0      0.0    0.0
9   0.30   0.0      0.0   10.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将多个 .txt 文件合并为 csv 的相关文章

随机推荐

  • 创建 JSON 并编辑复杂查询 (oracle 11g)

    我有 4 个不同的表 table price product 包含与产品相关的信息和 他们的价格 table price list 包含与价目表相关的信息 prices per client 包含与价格相关的信息 不同的客户给出特定的产品
  • 角度范围绑定 &(&) 是一次性绑定吗?

    角度范围绑定 是一次性绑定吗 我看到它被称为单向绑定 但它也是一次性的吗 假设我有
  • 在 Java 中嵌入树状图

    我正在寻找一个能够绘图的图书馆树状图 http en wikipedia org wiki DendrogramJava中的数据 不计算它们 我可以自己做 你有任何线索吗 已经尝试通过谷歌搜索它 但没有找到任何不独立的东西 虽然我需要将生成
  • 使用 Java Graphics2D API 在 TextLayout 中将文本右对齐

    因此 我正在使用 Java 教程中的代码来绘制一段文本 但我不知道如何将文本与右边距对齐 我刚刚包括attstring addAttribute TextAttribute RUN DIRECTION TextAttribute RUN D
  • 如何使用 Hibernate 测试表是否为空

    使用 Hibernate 确定表是否为空或非空的最有效方法是什么 换句话说 该表是否有 0 行或多于 0 行 我可以执行 HQL 查询select count from tablename然后检查结果是否为 0 或非 0 但这不是最佳选择
  • Mysql errno 150 尝试使用外键引用创建表

    我正在尝试在 mysql 中创建一个带有外键引用的表 如下所示 在数据库A中 CREATE TABLE replication id varchar 255 NOT NULL PRIMARY KEY uid varchar 255 NOT
  • RESTful servlet URL - web.xml 中的 servlet 映射

    我觉得这是一个常见问题 但我研究过的都还没有起作用 在我的 web xml 中 我有所有 REST 调用的映射
  • pip3 安装 pyautogui 失败,错误代码 1 Mac OS

    我尝试安装 autogui python 扩展 pip3 install pyautogui 此安装尝试会导致以下错误消息 Collecting pyautogui Using cached PyAutoGUI 0 9 33 zip Com
  • Blazor 继承 ChildContent RenderFragments?

    假设我们有一个基本组件ParentComponent razor div ChildContent div code Parameter public RenderFragment ChildContent get set 可以这样使用
  • IOS 将 URL 字符串转换为 NSString?

    我在转换时遇到问题URL string 我从 XML 文件中提取到NSString The URL string看起来像这样 看起来很奇怪 但确实如此URL format 3CTEXTFORMAT 20LEADING 3D 222 22 3
  • Xcode 多个静态库和重复符号

    我正在开发一个 iPad 应用程序 它依赖于两个静态实用程序库 libBFSDK 和 libBetfair Platform 这两个静态库都包含 AFNetworking 当我尝试在 iPad 应用程序中包含两个静态库时 我收到如下链接错误
  • Docker-Compose 挂载卷覆盖主机文件

    我正在从 CMS 装载一个目录 其中包含 Docker 容器内的内容文件 安装绝对有效 CMS 获得了一些基本文件 这些文件在构建过程中被复制到容器中的已安装文件夹中 然后它将被挂载到主机上的某个目录中 现在容器中的文件也位于主机上 我可以
  • HDBSCAN Python 选择簇数

    是否可以在Python中的HDBSCAN算法中选择簇的数量 或者唯一的方法是使用输入参数 例如 alpha min cluster size Thanks UPDATE 这是使用 fcluster 和 hdbscan 的代码 import
  • 角度过滤器:如何进行预过滤,以便角度过滤器仅考虑整个数据对象的一部分

    我有一个包含多个列的大型数据表 从 json api 获取数据 并且想要实现多个过滤器 执行以下操作 选择应考虑哪个数据列的选项 包含 thead 选项的下拉列表 my columnFilter 进而 用于过滤特定数据部分的输入字段 my
  • 如何在C# TBB中从类别名称中获取关键字?

    我正在尝试使用 C TBB 获取类别中存在的关键字 以使用以下 DWT TBB 中的输出 为此 我有一个带有类别字段的组件 我正在尝试编写以下 C TBB 来获取关键字值 try string className package GetVa
  • 转换为 UI 的记录器条目随着时间的推移停止更新

    我有一个 javafx concurrent Task 在后台运行一些代码并使用 java util logging Logger 提供有关其状态的信息 我需要在主线程的 UI 中显示此日志条目 我怎样才能做到这一点 这是我制作的一个简单的
  • 在 Perl 中比较日期的最佳方法是什么?

    我需要读取 2 个日期并进行比较 一个日期是 current date 年 月 日 另一个是由业务逻辑决定的 然后我需要比较两个日期 看看一个日期是否早于另一个日期 我怎样才能在 Perl 中做同样的事情 我正在寻找好的文档 但我在 Per
  • Android Studio 更新后 Gradle 项目刷新失败

    这是输出 11 57 04 AM Gradle KeddreaderProject 项目刷新失败 原因 org gradle internal service ServiceLocator Ljava lang ClassLoader V
  • 将集合转换为表达式 Maple/ 将前缀更改为固定表达式

    如何将下面的集合转换为表达式 Expression a b a x y can be any operator 所需输出为 result a b a x y required output 我尝试使用下面的转换函数进行转换 asString
  • 将多个 .txt 文件合并为 csv

    Python 新手 我正在尝试将多个文本文件合并为 1 个 csv 下面的例子 文件名 csv Alpha 0 0 1 0 15 0 2 0 25 0 3 文本1 txt Alpha Beta 0 10 0 2 20 0 3 30 文本2