【问题标题】:python in loop substracting files one from another循环中的python从另一个中减去文件
【发布时间】:2021-12-22 22:25:41
【问题描述】:

我正在尝试编写一个简短的程序,允许我从其他文件中减去一个文件 (file A.dat) 中的值 **(B0.dat, B1.dat, B2 .dat .....)我想制作一个程序,该程序将重复减去 A 文件值的过程,因为我有很多 B 文件(3、7 或 81)。所有文件都有相同的数量列。文件 A 有一行,文件 B 有 2 行 + co 我想最好的解决方案是做一个循环,但我有错误。 最后,我想将每个更正的文件另存为 B0sub、B1sub、B2sub .....

file A. dat 

A   B   C   D
-1  2   2.5 4


file B0.dat         
A   B   C   D
7   8   9   10
5   3   13  11

file B1.dat 
A   B   C   D
11  12  13  14
3   4   7   8

file B2.dat 
A   B   C   D
6   8.5 5.3 1
0.8 4.2 2   9

I have totally no idea how to do it so far I tried this 


import os
filepath = 'location of files'


i = 0   
filename = f'B{i}.dat'    
file = pd.read_csv(filepath, delimiter='\t', decimal=',', header=0)
## adding 'sub' to the file 
for file in files 
    os.rename(os.path.join(directory,file), os.path.join, file + 'sub' + '.dat')
    

# next file 
 i += 1
filename = f'B{i}.dat'`````

【问题讨论】:

  • 在这种情况下,使用 numpy 可能是个好主意。查看 numpy load 方法并使用 numpy 数组。 (如果你可以使用外部模块))
  • 为什么是 numpy 而不是 pandas?

标签: python loops file dat-protocol


【解决方案1】:
  1. 如果您有逗号分隔数据,请使用 CSV
  2. 在您以后的问题中,请提供一种简单的方法让我们重新创建您拥有的数据(就像我在回答中所做的那样)
  3. 只需使用B = B - A.loc[0] 将一行减去整个数据帧

创建一些示例数据的代码:

import pandas as pd
import glob

# Create sample data
data_A = pd.DataFrame(data={"A": [-1], "B": [2]})

data_A.to_csv("A.csv", index=False)

data_B0 = pd.DataFrame(data={"A": [7, 5], "B": [8, 3]})
data_B1 = pd.DataFrame(data={"A": [11, 3], "B": [12, 4]})
data_B0.to_csv("B0.csv", index=False)
data_B1.to_csv("B1.csv", index=False)

读取数据和减法的代码 A = pd.read_csv("A.csv")

for f in glob.glob("B*.csv"):
    B = pd.read_csv(f)
    B = B - A.loc[0]
    print(B)
    B.to_csv("sub_" + f, index=False)

显示:

# For B0:
   A  B
0  8  6
1  6  1

# For B1:
    A   B
0  12  10
1   4   2

【讨论】:

  • 非常感谢您的快速回答。你给了我一些想法,所以我会继续尝试 :) 据我了解,你的程序适用于两个文件。实际上,我有很多 B 类文件,其中包含更多的列和行,这就是我想自动化它的原因
  • 特别是在这里我为包含 2 列的 2 个文件编写了一个示例,但我的答案适用于包含大量列的大量 B 文件。代码越短越容易理解
猜你喜欢
  • 2018-01-25
  • 2019-07-26
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多