使用python和pandas组合csv列

使用python和pandas组合csv列,python,pandas,csv,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 date,TBLkW 2018/03/05 11:00,277.01953 2018/03/05 12

我有两个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
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
和TBL.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
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
我正在使用下面的脚本来获取一个包含条目date,PVkW,TBLkW的文件,但是我得到的只是date,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)
脚本正在完成,没有错误


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

pandas.merge的默认模式为“内部”,它将占据两个列表的交叉点。因此,如果一个文件有一个日期条目,而另一个文件没有,脚本将继续工作。但是,如果希望结果文件包含所有数据,则应使用“外部”模式

更多信息请点击此处:

例如,使用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
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
TBL.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
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,

默认情况下,
b.dropna(axis=1)
会删除任何缺少值的列。您确定
b['TBLkW']
没有任何缺少的值吗?你也可以打印合并后的?你为什么不自己试一试?答案很容易得到。如果删除一行,则只会得到匹配的行。因此,如果要删除缺少值的行,它会继续工作,结果会有所不同
b=b.dropna(axis=0)
axis=1
会删除整列,这就是答案。如果我根本不使用这行代码,会发生什么?