我目前已经下载了120个文件(10年,每月)的csv数据.
我正在使用下面的一些代码将所有这些合并到一个按时间顺序排列的文档中,例如从1/1/09到1/1/19.
from glob import glob
files = sorted(glob('*.csv'))
with open('cat.csv', 'w') as fi_out:
for i, fname_in in enumerate(files):
with open(fname_in, 'r') as fi_in:
if i_line > 0 or i == 0:
fi_out.write(line)
Run Code Online (Sandbox Code Playgroud)
这很好用,但是我知道除了不同的产品外,我还下载了相同类型的数据.我还按时间顺序订购了所有这些新数据,但是将它与旧的数据集并排.
我收到如下错误:
任何帮助,将不胜感激.
EDIT1:
Traceback (most recent call last):
File "/Users/myname/Desktop/collate/asdas.py", line 4, in <module>
result = pd.merge(data1[['REGION', 'TOTALDEMAND', 'RRP']], data2, on='SETTLEMENTDATE')
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/reshape/merge.py", line 61, in merge
validate=validate)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/reshape/merge.py", line 551, in __init__
self.join_names) = self._get_merge_keys()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/reshape/merge.py", line 871, in _get_merge_keys
lk, stacklevel=stacklevel))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/generic.py", line 1382, in _get_label_or_level_values
raise KeyError(key)
KeyError: 'SETTLEMENTDATE'
Run Code Online (Sandbox Code Playgroud)
EDIT2:
import pandas as pd
df1 = pd.read_csv("product1.csv")
df2 = pd.read_csv("product2.csv")
combine = pd.merge(df1, df2, on='DATE', how='outer')
combine.columns = ['product1_price', 'REGION1', 'DATE', 'product2_price', 'REGION2']
combine[['DATE','product1_price','product2_price']]
combine.to_csv("combine.csv",index=False)
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "/Users/george/Desktop/collate/asdas.py", line 5, in <module>
combine.columns = ['VICRRP', 'REGION1', 'SETTLEMENTDATE', 'QLD1RRP', 'REGION2']
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/generic.py", line 4389, in __setattr__
return object.__setattr__(self, name, value)
File "pandas/_libs/properties.pyx", line 69, in pandas._libs.properties.AxisProperty.__set__
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/generic.py", line 646, in _set_axis
self._data.set_axis(axis, labels)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/internals.py", line 3323, in set_axis
'values have {new} elements'.format(old=old_len, new=new_len))
ValueError: Length mismatch: Expected axis has 9 elements, new values have 5 elements
Run Code Online (Sandbox Code Playgroud)
将数据加载到数据框中
import pandas as pd
data1 = pd.read_csv("filename1.csv")
data2 = pd.read_csv("filename2.csv")
Run Code Online (Sandbox Code Playgroud)
合并两个数据帧 SETTLEMENTDATE
result = pd.merge(data1, data2, on='SETTLEMENTDATE')
Run Code Online (Sandbox Code Playgroud)
这假设settlementdate两个数据帧之间存在一对一的关系.如果没有,将会有重复.
编辑:删除列"PERIOD TYPE"做
result = pd.merge(data1[['REGION', 'TOTALDEMA', 'RRP', 'SETTLEMENTDATE']], data2, on='SETTLEMENTDATE')
Run Code Online (Sandbox Code Playgroud)