我有两个不同行数的大csv文件,我按如下方式导入:
tdata = pd.read_csv(tfilepath, sep=',', parse_dates=['date_1'])
print(tdata.iloc[:, [0,3]])
TBA date_1
0 0 2010-01-04
1 9 2010-01-05
2 0 2010-01-06
3 8 2010-01-07
4 0 2010-01-08
5 0 2010-01-09
pdata = pd.read_csv(pfilepath, sep=',', parse_dates=['date_2'])
print(pdata.iloc[:, [0,3]])
TBA date_2
0 3 2011-01-04
1 5 2010-01-09
2 0 2012-02-03
3 9 2010-03-17
4 1 2010-11-08
5 2 2010-01-05
现在我想在第一个数据帧中将TBA替换为日期匹配的第二个数据帧中的相应TBA。默认值为0.所以我按如下方式遍历行:
for i, row1 in tdata.iterrows():
for j, row2 in pdata.iterrows():
if row1['date_1'] == row2['date_2']:
tdata.loc[i, 'TBA'] = row2['TBA']
break
else:
tdata.loc[i, 'TBA'] = 0
问题是这需要很长时间(大约11分钟)。我想比较一个csv与160个其他csv,并进一步运行一些基于树的模型。我是一个没有编码背景的新人!请原谅我,如果这是一个“肮脏的”'办法。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:3)
如果您在pdata
上致电set_index
至date_2
,那么您可以将此作为参数传递给map
并在tdata['date_1']
列上调用,然后{ {3}}:
In [51]:
tdata['TBA'] = tdata['date_1'].map(pdata.set_index('date_2')['TBA'])
tdata.fillna(0, inplace=True)
tdata
Out[51]:
TBA date_1
0 0 2010-01-04
1 2 2010-01-05
2 0 2010-01-06
3 0 2010-01-07
4 0 2010-01-08
5 5 2010-01-09