繁体   English   中英

使用Python处理多个CSV文件中对应字段的值

[英]Processing values of corresponding fields in multiple CSV files using Python

我一直在尝试在多个 CSV 文件中找到相应值的最小值和最大值。

虽然实际上我有几个文件,每个文件都有多个列,但这里有三个简单的示例文件:

a1,a2,a3
b1,b2,b3
c1,c2,c3

p1,p2,p3
q1,q2,q3
r1,r2,r3

x1,x2,x3
y1,y2,y3
z1,z2,z3

使用python,如何创建对应值的列表,例如L1 = [a1,p1,x1,...] , L2=[a2,p2,x2,..]等等。

创建包含上述输入文件的相应值的最小值和最大值的 CSV 文件的任何简单方法

min(a1,p1,x1)-max(a1,p1,x1), min(a2,p2,x2)-max(a2,p2,x2), min(a3,p3,x3)-max(a3,p3,x3)
min(b1,q1,y1)-max(b1,q1,y1), min(b2,q2,y2)-max(b2,q2,y2), min(b3,q3,y3)-max(b3,q3,y3) 
min(c1,r1,z1)-max(c1,r1,z1), min(c2,r2,z2)-max(c2,r2,z2), min(c3,r3,z3)-max(c3,r3,z3) 

任何帮助将不胜感激

如果你想用纯 Python 来做,你可以这样做:

from contextlib import ExitStack
import csv

in_filenames = ["file1.csv", "file2.csv", "file3.csv"]
out_filename = "file.csv"

with ExitStack() as stack:
    readers = [
        csv.reader(stack.enter_context(open(filename, "r")))
        for filename in in_filenames
    ]
    writer = csv.writer(stack.enter_context(open(out_filename, "w")))
    while True:
        try:
            rows = zip(*[next(reader) for reader in readers])
        except StopIteration:
            break
        else:
            out_row = []
            for numbers in rows:
                numbers = [float(number) for number in numbers]
                out_row.append(min(numbers) - max(numbers))
            writer.writerow(out_row)

如果你可以使用 Pandas,那就更容易了:

import pandas as pd

in_filenames = ["file1.csv", "file2.csv", "file3.csv"]
out_filename = "file.csv"

dfs = [
    pd.read_csv(filename, header=None)
    for filename in in_filenames
]
dfs = [
    pd.concat((df[col] for df in dfs), axis=1)
    for col in dfs[0].columns
]
df = pd.concat(
    (df.min(axis=1) - df.max(axis=1) for df in dfs),
    axis=1
)
df.to_csv(out_filename, index=False, header=False)

(可能有更简单的方法,我只是还没有看到。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM