首页 > 解决方案 > 使用 python 和 pandas 组合 csv 列

问题描述

我有两个 csv 数据文件。PV.csv 有这样的行:

date,PVkW
2018/03/05 11:00,887.4
2018/03/05 12:00,940.9
2018/03/05 13:00,927.2
2018/03/05 14:00,845.9
2018/03/05 15:00,683.0
2018/03/05 16:00,423.1
2018/03/05 17:00,186.4

和 TBL.csv 有这样的行:

date,TBLkW
2018/03/05 11:00,277.01953
2018/03/05 12:00,285.30783
2018/03/05 13:00,236.8461
2018/03/05 14:00,243.26564
2018/03/05 15:00,274.98438
2018/03/05 16:00,255.20079
2018/03/05 17:00,262.28046

我正在使用下面的脚本来获取一个包含条目日期 PVkW TBLkW 的文件,但我得到的只是日期 PVkW 的副本。我错过了什么?

import pandas as pd

a = pd.read_csv('PV.csv')
b = pd.read_csv('TBL.csv')
b = b.dropna(axis=1)
merged = a.merge(b, on='date')
merged.to_csv("combined.csv", index=False)

该脚本正在完成而没有错误。

如果一个文件有另一个文件没有的日期条目,这个脚本会继续工作吗?

标签: pythonpandascsv

解决方案


pandas.merge 的默认模式是 'inner',它将采用两个列表的交集。所以你的脚本工作,如果一个文件有一个日期条目而另一个文件没有,它会继续,但是如果你希望你的结果文件包含所有数据,那么你应该使用“外部”模式。

更多信息在这里:https ://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

例如 PV.csv 像:

date,PVkW
2018/03/05 11:00,887.4
2018/03/05 12:00,940.9
2018/03/05 13:00,927.2
2018/03/05 14:00,845.9
2018/03/05 15:00,683.0
2018/03/05 16:00,423.1
2018/03/05 17:00,186.4
2018/03/05 18:00,186.4

TBL.csv 喜欢:

date,TBLkW
2018/03/05 11:00,277.01953
2018/03/05 12:00,285.30783
2018/03/05 13:00,236.8461
2018/03/05 14:00,243.26564
2018/03/05 15:00,274.98438
2018/03/05 16:00,255.20079
2018/03/05 17:00,262.28046

这个脚本:

import pandas as pd

a = pd.read_csv('PV.csv')
b = pd.read_csv('TBL.csv')
b = b.dropna(axis=1)
merged = a.merge(b, how='outer', on='date')
merged.to_csv("combined.csv", index=False)

你得到 :

date,PVkW,TBLkW
2018/03/05 11:00,887.4,277.01953
2018/03/05 12:00,940.9,285.30782999999997
2018/03/05 13:00,927.2,236.8461
2018/03/05 14:00,845.9,243.26564
2018/03/05 15:00,683.0,274.98438
2018/03/05 16:00,423.1,255.20078999999998
2018/03/05 17:00,186.4,262.28046
2018/03/05 18:00,186.4,

推荐阅读