我有两个pandas DataFrames:
主:
id date store_nbr item_nbr unit_sales onpromotion
0 0 2013-01-01 25 103665 7.00 NaN
1 1 2013-01-01 25 105574 1.00 NaN
2 2 2013-01-01 25 105575 2.00 NaN
3 3 2013-01-01 25 108079 1.00 NaN
4 4 2013-01-01 25 108701 1.00 NaN
5 5 2013-01-01 25 108786 3.00 NaN
6 6 2013-01-01 25 108797 1.00 NaN
7 7 2013-01-01 25 108952 1.00 NaN
8 8 2013-01-01 25 111397 13.00 NaN
9 9 2013-01-01 25 114790 3.00 NaN
10 10 2013-01-01 25 114800 1.00 NaN
11 11 2013-01-01 25 115267 1.00 NaN
12 12 2013-01-01 25 115611 1.00 NaN
和项目:
item_nbr family class perishable
0 96995 GROCERY I 1093 0
1 99197 GROCERY I 1067 0
2 103501 CLEANING 3008 0
3 103520 GROCERY I 1028 0
4 103665 BREAD/BAKERY 2712 1
5 105574 GROCERY I 1045 0
6 105575 GROCERY I 1045 0
当然两者都比那些记录要长得多。
我想使用常见的item_nbr列加入它们,但无论我如何尝试加入它们,我都有一个KeyError:
joined = pd.merge(main, items, on='item_nbr')
KeyError: 'item_nbr'
我错过了什么吗?
我读过这个网站,发现没有解决方案:
https://pandas.pydata.org/pandas-docs/stable/merging.html
答案 0 :(得分:0)
列名中可能有空格,所以
main.columns = main.columns.str.strip()
#and
items.columns=items.columns.str.strip()
您现在可以合并数据框
答案 1 :(得分:0)
另一种替代方法是在导入时删除空格。类似的东西:
pd.read_csv(file,sep='\s*,\s*') # delimiter includes x*whitespace before and after
示例代码:
import io
import pandas as pd
# Sample data with whitespace after column
data = '''\
A ,B
1,2'''
(pd.read_csv(io.StringIO(data)).columns.tolist() ==
pd.read_csv(io.StringIO(data),sep='\s*,\s*').columns.tolist())
返回
False