Python中的Pandas错误:列必须与密钥长度相同

时间:2017-10-05 12:04:51

标签: python pandas web-scraping debian

我正在网上搜索一些网站上的一些数据,而我正在使用pandas来修改它。

在第一个数据中它运行良好,但后来我收到此错误消息:`

Traceback(most recent call last): File "data.py", line 394 in <module> df2[['STATUS_ID_1','STATUS_ID_2']] = df2['STATUS'].str.split(n=1, expand=True) File "/home/web/.local/lib/python2.7/site-packages/pandas/core/frame.py, line 2326, in __setitem__ self._setitem_array(key,value) File "/home/web/.local/lib/python2.7/site-packages/pandas/core/frame.py, line 2350, in _setitem_array raise ValueError("Columns must be same lenght as key')  ValueError: Columns must be same lenght as key

我的代码部分在这里:

df2 = pd.DataFrame(datatable,columns = cols)
df2['FLIGHT_ID_1'] = df2['FLIGHT'].str[:3]
df2['FLIGHT_ID_2'] = df2['FLIGHT'].str[3:].str.zfill(4)
df2[['STATUS_ID_1','STATUS_ID_2']] = df2['STATUS'].str.split(n=1, expand=True)

EDIT-jezrael:我使用了你的代码,并从中得到了一个印刷品: 我希望有了这个,我们可以找到问题所在。因为当脚本出现问题时,它似乎是随机的..

                 0         1
2       Landed   8:33 AM
3       Landed   9:37 AM
4       Landed   9:10 AM
5       Landed   9:57 AM
6       Landed   9:36 AM
8       Landed   8:51 AM
9       Landed   9:18 AM
11      Landed   8:53 AM
12      Landed   7:59 AM
13      Landed   7:52 AM
14      Landed   8:56 AM
15      Landed   8:09 AM
18      Landed   8:42 AM
19      Landed   9:39 AM
20      Landed   9:45 AM
21      Landed   7:44 AM
23      Landed   8:36 AM
27      Landed   9:53 AM
29      Landed   9:26 AM
30      Landed   8:23 AM
35      Landed   9:59 AM
36      Landed   8:38 AM
37      Landed   9:38 AM
38      Landed   9:37 AM
40      Landed   9:27 AM
43      Landed   9:14 AM
44      Landed   9:22 AM
45      Landed   8:18 AM
46      Landed  10:01 AM
47      Landed  10:21 AM
..         ...       ...
316    Delayed   5:00 PM
317    Delayed   4:34 PM
319  Estimated   2:58 PM
320  Estimated   3:02 PM
321    Delayed   4:47 PM
323  Estimated   3:08 PM
325    Delayed   3:52 PM
326  Estimated   3:09 PM
327  Estimated   2:37 PM
328  Estimated   3:17 PM
329  Estimated   3:20 PM
330  Estimated   2:39 PM
331    Delayed   4:04 PM
332    Delayed   4:36 PM
337  Estimated   3:47 PM
339  Estimated   3:37 PM
341    Delayed   4:32 PM
345  Estimated   3:34 PM
349  Estimated   3:24 PM
356    Delayed   4:56 PM
358  Estimated   3:45 PM
367  Estimated   4:09 PM
370  Estimated   4:04 PM
371  Estimated   4:11 PM
373    Delayed   5:21 PM
382  Estimated   3:56 PM
384    Delayed   4:28 PM
389    Delayed   4:41 PM
393  Estimated   4:02 PM
397    Delayed   5:23 PM

[240 rows x 2 columns]

1 个答案:

答案 0 :(得分:2)

您需要一点修改解决方案,因为有时它会返回2,有时只返回一列:

df2 = pd.DataFrame({'STATUS':['Estimated 3:17 PM','Delayed 3:00 PM']})


df3 = df2['STATUS'].str.split(n=1, expand=True)
df3.columns = ['STATUS_ID{}'.format(x+1) for x in df3.columns]
print (df3)
  STATUS_ID1 STATUS_ID2
0  Estimated    3:17 PM
1    Delayed    3:00 PM

df2 = df2.join(df3)
print (df2)
              STATUS STATUS_ID1 STATUS_ID2
0  Estimated 3:17 PM  Estimated    3:17 PM
1    Delayed 3:00 PM    Delayed    3:00 PM

另一种可能的数据 - 所有数据都没有空格和解决方案也可以工作:

df2 = pd.DataFrame({'STATUS':['Canceled','Canceled']})

和解决方案返回:

print (df2)
     STATUS STATUS_ID1
0  Canceled   Canceled
1  Canceled   Canceled

所有在一起:

df3 = df2['STATUS'].str.split(n=1, expand=True)
df3.columns = ['STATUS_ID{}'.format(x+1) for x in df3.columns]
df2 = df2.join(df3)