Python pandas merge无法找到列名

时间:2017-12-02 12:54:31

标签: python pandas merge

我有两个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

2 个答案:

答案 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