簡體   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