Python 熊猫抓取的数据在熊猫身上不起作用
为什么当我将数据手动输入excel时,pandas工作正常。然而,当我抓取数据时,将其放入csv。它给了我:Python 熊猫抓取的数据在熊猫身上不起作用,python,python-3.x,pandas,selenium,screen-scraping,Python,Python 3.x,Pandas,Selenium,Screen Scraping,为什么当我将数据手动输入excel时,pandas工作正常。然而,当我抓取数据时,将其放入csv。它给了我: zz = df1.WE=np.where(df3.AL.isin(df1.EW),df1.WE,np.nan) ValueError: operands could not be broadcast together with shapes (148,) (537,) () 其他站点没有出现这种情况。我是不是漏掉了什么明显的东西?excel格式是否不正确,或者此处的数据是否有
zz = df1.WE=np.where(df3.AL.isin(df1.EW),df1.WE,np.nan)
ValueError: operands could not be broadcast together with shapes (148,) (537,) ()
其他站点没有出现这种情况。我是不是漏掉了什么明显的东西?excel格式是否不正确,或者此处的数据是否有所不同
df3
df1
代码:
我已经提供了创建dataframe 1、2和pandas代码的所有脚本,直到它创建错误为止
我一直在
错误:
zz = df1.WE=np.where(df3.AL.isin(df1.EW),df1.WE,np.nan)
ValueError: operands could not be broadcast together with shapes (0,) (4,) ()
从scrape创建并作为数据帧加载的错误文件:
如果这是不够的,我也加载了文件,因为他们是
,
手动创建的工作文件:
工作:
,
你知道怎么解决吗?我想你需要改变:
df1.WE=np.where(df3.AL.isin(df1.EW),df1.WE,np.nan)
到
问题是数据帧的长度与实际数据不同。因此,需要将df1
中的数据更改为另一个数据-将返回的MAK与df1
长度相同且无错误
使用您的数据:
df1 = pd.read_csv('df1.csv', names=['a','b','c'])
print (df1.head())
a b \
0 Ponte Preta U20 v Cruzeiro U20 2.10
1 Fluminense RJ U20 v Defensor Sporting U20 2.00
2 Gremio RS U20 v Palmeiras U20 3.30
3 Barcelona v Sporting 1.33
4 Bayern Munich v PSG 2.40
c
0 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
1 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
2 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
3 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
4 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
comapre数字列,此处为
b
和d
:
df1.b=np.where(df1.b.isin(df2.d),df1.b,np.nan)
#first 5 values is NaNs
print (df1.head())
a b \
0 Ponte Preta U20 v Cruzeiro U20 NaN
1 Fluminense RJ U20 v Defensor Sporting U20 NaN
2 Gremio RS U20 v Palmeiras U20 NaN
3 Barcelona v Sporting NaN
4 Bayern Munich v PSG NaN
测试数据的另一个问题是行数(4)相同,因此没有错误。在旁注中,我建议对pandas使用pandas函数:
df1.loc[~df1.EW.isin(df2.AL), 'WE'] = np.nan
好的,让我们回到绘图板上。上面的代码更简洁,但与使用numpy时的操作完全相同。让我们分开你的代码 1) 我强烈建议您使用jupyter/jupyter笔记本电脑来处理数据并了解每一行的情况。看看这里,例如: 因此,df1有100行和3列。df2有42行5列 现在,您将
df3
创建为一个空数据帧(0行),但有12列(顺便说一句,也许您应该使用更多解释性的列名)。这一步完全可以,而不必事先定义所有列
让我们转到第二行:
df3['DAT']=df2['AA']
这里基本上是从第二个数据帧复制列。现在,因为我们以前在df3中没有任何行,所以它是完全合法的操作。通过这样做,您可以在df3中创建42行。同样,这一行本身是好的
现在,最后一行。这里的逻辑如下:首先,对于df3中的每一行,我们检查df3.AL
(其值)的单元格是否在df1.EW
列中。请注意,我们以前从未定义过df3.AL,因此整个列只包含nan,因此这本身没有任何意义
接下来,让我们假设df3.AL中有一些东西。当我们逐行检查所有内容时,我们将得到一个布尔值的pd.Series(think-one列),作为这个测试的结果,这个列有42行。现在,我们尝试将此列用作“掩码”,它定义df1.we是否应该相同或默认为Nan。但您不能这样做,因为df1有100行,而不是42行!。亨斯,我们搞错了
因此,您需要重新定义您在这里实际想要做什么-现在还不清楚您在这里实际需要做什么。我得到:raise ValueError('值的长度与''index'的长度不匹配')ValueError:值的长度与索引的长度不匹配:df3['O2']=zz您不认为可以看一下吗?尝试为3个数据帧创建vlookup。我不建议编写像
x=y=4+5
这样的东西,因为它很难阅读。这里显然我们没有给d['O2']赋值,亨斯,可能,它都是空的。也许,这会奏效df3.loc[~df3.EW.isin(df2.AL),'WE']=np.nan
然后df3['O3']=df3.WE
呃,等着瞧。该代码对我不起作用。尽管我试图调整它,但这会创建一个空O3列
df1.WE=np.where(df1.EW.isin(df2.AL),df1.WE,np.nan)
df1 = pd.read_csv('df1.csv', names=['a','b','c'])
print (df1.head())
a b \
0 Ponte Preta U20 v Cruzeiro U20 2.10
1 Fluminense RJ U20 v Defensor Sporting U20 2.00
2 Gremio RS U20 v Palmeiras U20 3.30
3 Barcelona v Sporting 1.33
4 Bayern Munich v PSG 2.40
c
0 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
1 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
2 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
3 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
4 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
df2 = pd.read_csv('df2.csv', names=['a','b','c', 'd', 'e'])
print (df2.head())
a b c d \
0 In-Play CSKA Moscow U19 Man Utd U19 1.14
1 In-Play Atletico Madrid U19 Chelsea U19 1.01
2 In-Play Juventus U19 Olympiakos U19 1.40
3 Starting in 22' Paris St-G U19 Bayern Munich U19 2.24
4 Today 21:00 Man City U19 Shakhtar U19 2.66
e
0 https://www.betfair.com.au/exchange/plus/footb...
1 https://www.betfair.com.au/exchange/plus/footb...
2 https://www.betfair.com.au/exchange/plus/footb...
3 https://www.betfair.com.au/exchange/plus/footb...
4 https://www.betfair.com.au/exchange/plus/footb...
df1.b=np.where(df1.b.isin(df2.d),df1.b,np.nan)
#first 5 values is NaNs
print (df1.head())
a b \
0 Ponte Preta U20 v Cruzeiro U20 NaN
1 Fluminense RJ U20 v Defensor Sporting U20 NaN
2 Gremio RS U20 v Palmeiras U20 NaN
3 Barcelona v Sporting NaN
4 Bayern Munich v PSG NaN
c
0 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
1 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
2 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
3 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
4 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
#check if some not NaNs values in b column
print (df1[df1.b.notnull()])
a b \
23 Swindon v Forest Green 1.40
50 Sportivo Barracas v Canuelas FC 13.00
80 FC Nitra 1.53
81 0-0 1.40
83 Cape Town City v Maritzburg Utd 1.53
84 Mamelodi Sundowns v Baroka FC 3.75
90 Dorking Wanderers v Tonbridge Angels 1.53
95 Coalville Town v Stamford 1.40
c
23 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
50 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
80 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
81 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
83 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
84 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
90 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
95 https://www.bet365.com.au/#/AC/B1/C1/D13/E40/F...
df1.loc[~df1.EW.isin(df2.AL), 'WE'] = np.nan