为什么pandas不一致地用于csv数据

时间:2017-12-13 08:22:42

标签: python python-3.x pandas csv selenium

为什么Panda没有正确读取值?我正试图通过数据帧中的vlookup找到常用项目。

这是发生了什么。 enter image description here

请注意,突出显示的黄色值未显示在输出中,但是匹配。

作为df1中的简单示例,我有:

   A                   B                                 C         D
  gg                 vv #manually entered data          1.82    Betlink1
  Adelaide United     Newcastle Jets                    2.32    Betlink2
   aa                    aa                             aa        aa

在df2中

A    B                    C                                D          E
13   Adelaide United     Newcastle Jets                    2      Betlink3
14   gg                  vv #manually entered data         1      Betlink4

输出:

AA   AB     AC     O2      AE         EW      O1      DA
14   gg     vv     1.82   Betlink1   gg v vv  1   Betlink4

预期:

AA   AB                AC             O2      AE         EW        O1      DA
14   gg                vv             1.82   Betlink1   gg v vv    1   Betlink4
13   Adelaide United  New Castle Jets 2.32   Betlink2   (val of AC)2    Betlink3             

为什么这样做?刮数据不同吗?似乎熊猫不一致地查看了数据。如何在csv中编辑pandas数据,以便它不会这样做。

有没有办法通过刮硒来纠正这个问题? 硒

import csv
import os
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.set_window_size(1024, 600)
driver.get('https://www.betfair.com.au/exchange/plus/football')
time.sleep(7)


langs = driver.find_elements_by_css_selector("ul.runners > li:nth-child(1)")
langs_text = []

for lang in langs:
    langs_text.append(lang.text)


directory = 'C:/331.csv'
with open(directory, 'a', newline='', encoding="utf-8") as outfile:
    writer = csv.writer(outfile)
    for row in zip(langs_text):
        writer.writerow(row)

或者这更像是熊猫问题:

import pandas as pd
import time
time.sleep(0)
df1 = pd.read_csv('C:\\33.csv',
                  index_col=False,
                  usecols=[0, 1, 2, 3],
                  names=["EW", "WE", "DA", "DD"],
                  header=None)



df2 = pd.read_csv('C:\\33.csv',
                  index_col=False,
                  usecols=[0, 1, 2, 3, 4],
                  names=["AA", "AB", "AC", "AD", "AE"],
                  header=None)



ZF= df1.EW.str.split(' v ').apply(lambda x : [y.split(' ')[0] for y in x]).apply(' v '.join)
df1['EW'] = ZF

df1['EW'] = df1['EW'] + ' v ' + df1['WE']

df1['WE'] = df1['DA']
df1['DA'] = df1['DD']
print(df1.head())


df2['EW'] = df2['AB'] + ' v ' + df2['AC']
#print(df2.head())
#df2['EW'] = df2['AB'] + ' v ' + df2['AC']


df3 = pd.merge(df2, df1, on='EW')
df3 = df3.rename(columns={'WE':'O1','AD':'O2'})
df3['D'] = df3['O2'].sub(df3['O1'], fill_value=0)

我在Excel中使用vlookup公式尝试了这个,没有这样的问题。

我认为csv数据是以某种方式处理的,也许刮不是问题,而是你如何使用pandas来处理它。奇怪的是,有时工作是有效的,有时则不然。有办法解决这个问题吗?我看过细胞,看起来没有任何差距,所以我不知道为什么找不到匹配。

csv文件可能已损坏,但不太可能,因为它每次都是新创建的csv。

File 1

File 2

1 个答案:

答案 0 :(得分:1)

更改为以下内容,不应出现任何问题。

SELECT num1, num2
FROM position
WHERE num1 <> 0 AND num2 <> 0
ORDER BY positiondatetime DESC ;