【发布时间】:2018-11-28 23:55:09
【问题描述】:
下面是我的 selenium 网络爬虫的最后一部分,它循环遍历此 website page 的不同选项卡,选择“导出数据”按钮,下载数据,添加“yearid”列,然后将数据加载到MySQL 表。
df = pd.read_csv(desired_filepath)
df["yearid"] = datetime.today().year
df[df.columns[df.columns.str.contains('%')]] = \
(df.filter(regex='%')
.apply(lambda x: pd.to_numeric(x.str.replace(r'[\s%]', ''),
errors='coerce')))
df.to_csv(desired_filepath)
engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}"
.format(user="walker",
pw="password",
db="data"))
df.to_sql(con=engine, name='fg_test_hitting_{}'.format(button_text), if_exists='replace')
time.sleep(10)
driver.quit()
一切都很好,但我想将数据导入 MySQL 表并仅在 yearid=2018 时替换。有谁知道在特定条件下是否可以加载数据和替换?提前致谢!
【问题讨论】:
-
你能在加载到mysql之前过滤数据子集吗?
df[df['yearid']==2018].to_sql(...)之类的东西? -
很遗憾,您不能这样做,因为当前表有多年的数据。刮刀一次只提取一年的数据,所以当它替换时,它会删除其他年份的数据,而我只会被 2018 年的数据卡住。
-
试试
if_exists='append' -
感谢推荐!不幸的是,我也不能这样做,因为我提取的数据是棒球赛季的总数。如果我附加,我将拥有一个数据库,其中包含每个球员的多个赛季总数。我需要替换具有 yearid=2018 的每一行,以便每个玩家在该特定年份都有一个赛季总数。
-
一种方法可能是首先输入所有前几年的数据。然后让您的更新过程执行以下操作:1) 删除所有 2018 年数据,2) 重新创建更新的 2018 年数据,以及 3) 使用
if_exists='append'放回更新的 2018 年数据。
标签: python mysql pandas selenium sqlalchemy