[英]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.