gpt4 book ai didi

python - 在 python 中合并两个具有唯一列的 CSV

转载 作者:行者123 更新时间:2023-11-28 21:24:27 25 4
gpt4 key购买 nike

我有两个 CSV 文件,代表两个不同年份的数据。我知道如何使用 csvwriter 和 dictkeys 进行基本合并,但问题出在这里:虽然 CSV 大多共享列标题,但每个列可能都有唯一的列。如果某一物种在一年内被捕获而另一年未被捕获,则该列将仅在该年出现。如何将新数据合并到旧数据,创建新列并在这些列中用零填充旧数据?

文件 1:“日期”,“时间”,“物种 A”,“物种 B”,“物种 X”

文件 2:“日期”,“时间”,“物种 A”,“物种 B”,“物种 C”

我需要最终结果是一个带有此 header 的 csv: “日期”,“时间”,“物种 A”,“物种 B”,“物种 C”,“物种 X”

最佳答案

其他人可能会使用 csv 模块发布解决方案,因此我将给出 pandas用于比较目的的解决方案:

import pandas as pd

df1 = pd.read_csv("fish1.csv")
df2 = pd.read_csv("fish2.csv")

df = pd.concat([df1, df2]).fillna(0)
df = df[["Date", "Time"] + list(df.columns[1:-1])]
df.to_csv("merged_fish.csv", index=False)

解释:

首先,我们读入两个文件:

>>> df1 = pd.read_csv("fish1.csv")
>>> df2 = pd.read_csv("fish2.csv")
>>> df1
Date Time Species A Species B Species X
0 1 2 3 4 5
1 6 7 8 9 10
2 11 12 13 14 15
>>> df2
Date Time Species A Species B Species C
0 16 17 18 19 20
1 21 22 23 24 25
2 26 27 28 29 30

然后我们简单地连接它们,这会自动用 NaN 填充缺失的数据:

>>> df = pd.concat([df1, df2])
>>> df
Date Species A Species B Species C Species X Time
0 1 3 4 NaN 5 2
1 6 8 9 NaN 10 7
2 11 13 14 NaN 15 12
0 16 18 19 20 NaN 17
1 21 23 24 25 NaN 22
2 26 28 29 30 NaN 27

你想让它们填充 0,所以:

>>> df = pd.concat([df1, df2]).fillna(0)
>>> df
Date Species A Species B Species C Species X Time
0 1 3 4 0 5 2
1 6 8 9 0 10 7
2 11 13 14 0 15 12
0 16 18 19 20 0 17
1 21 23 24 25 0 22
2 26 28 29 30 0 27

此顺序与您要求的顺序不完全相同,但是您首先需要 TimeDate,因此:

>>> df = df[["Date", "Time"] + list(df.columns[1:-1])]
>>> df
Date Time Species A Species B Species C Species X
0 1 2 3 4 0 5
1 6 7 8 9 0 10
2 11 12 13 14 0 15
0 16 17 18 19 20 0
1 21 22 23 24 25 0
2 26 27 28 29 30 0

然后我们将其保存为 CSV 文件:

>>> df.to_csv("merged_fish.csv", index=False)

生产

Date,Time,Species A,Species B,Species C,Species X
1,2,3,4,0.0,5.0
6,7,8,9,0.0,10.0
11,12,13,14,0.0,15.0
16,17,18,19,20.0,0.0
21,22,23,24,25.0,0.0
26,27,28,29,30.0,0.0

关于python - 在 python 中合并两个具有唯一列的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16016984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com