Python 熊猫在同一列上合并数据帧
我正在编写一个scraper,我希望循环遍历一个链接列表,并将所有结果作为列合并到同一个键上的数据帧(如左连接) 我在Ipython笔记本中运行了这段代码,从dataframe生成的csv没有意义,但是如果在运行脚本后,我在共同列“问题”上合并了df和df2,我得到了我需要的连接,但是在脚本中出现了一些错误 这是整个脚本,有登录请求,但你不必创建用户,你可以作为来宾运行它,你不会在评论中得到所有答案Python 熊猫在同一列上合并数据帧,python,csv,pandas,Python,Csv,Pandas,我正在编写一个scraper,我希望循环遍历一个链接列表,并将所有结果作为列合并到同一个键上的数据帧(如左连接) 我在Ipython笔记本中运行了这段代码,从dataframe生成的csv没有意义,但是如果在运行脚本后,我在共同列“问题”上合并了df和df2,我得到了我需要的连接,但是在脚本中出现了一些错误 这是整个脚本,有登录请求,但你不必创建用户,你可以作为来宾运行它,你不会在评论中得到所有答案 import requests from bs4 import BeautifulSoup as
import requests
from bs4 import BeautifulSoup as bs
import csv
import pandas as pd
get_url = 'https://www.g2crowd.com/login?form=login'
post_url = 'https://www.g2crowd.com/user_sessions'
review_url = 'https://www.g2crowd.com/survey_responses/salesforce-crm-review-29972'
links = []
with open("links.csv", "r") as f:
spamreader = csv.reader(f, delimiter=',')
for row in spamreader:
links.append(row)
links = links[1:]
s = requests.Session()
r = s.get(get_url)
soup = bs(r.text)
token = soup.select('input[name="authenticity_token"]')[0]['value']
username = 'email@gmail.com'
password = 'password'
payload = {"user_session[login_email]": "email@gmail.com", "user_session[password]": "password"}
payload['authenticity_token'] = token
Referer = dict(Referer=get_url)
r = s.post(post_url, data=payload, headers=Referer)
print r.status_code
df = pd.read_csv("data.csv")
#df = df.set_index('questions')
for link in links:
r = s.get(link[0])
soup = bs(r.text)
title = soup.title.contents[0]
question_wrapper = soup.findAll("div", class_="question-wrapper")
print len(question_wrapper)
questions = []
answers = []
scraped_titles = []
tricky_title = 'Salesforce CRM Review by G2 Crowd User in Transportation/Trucking/Railroad - March 13, 2013'
with open("scraped_titles.csv", "r") as f:
spamreader = csv.reader(f, delimiter=',')
for row in spamreader:
scraped_titles.append(row[0])
scraped_titles = set(scraped_titles)
if (title not in scraped_titles and title != tricky_title):
for question in question_wrapper:
q = question.label.contents[0]
a = question.div.contents[0].text
questions.append(q)
answers.append(a)
#qa = zip(questions, answers)
qa = dict(questions=questions, answers=answers)
df2 = pd.DataFrame(qa)
#df2 = df2.set_index('questions', inplace=True)
#df2.to_csv(title + ".csv", encoding='utf-8')
df = pd.merge(df, df2, how='left', on='questions')
with open("scraped_titles.csv", "a") as csvwriter:
spamreader = csv.writer(csvwriter, delimiter=',')
spamreader.writerow([unicode(title).encode("utf-8")])
else:
pass
df.to_csv("all_data.csv", encoding='utf-8')
我还尝试将所有评论保存到.csv,然后将所有内容与Pandas合并,但我遇到了一个奇怪的、罕见的未记录错误:
错误:未加引号的字段中出现新行字符-是否需要打开
文件是否处于通用换行符模式
我一直在努力寻找我的错误,如果有人能指出这将是非常有益的。
另外,我希望我已经按照规则设置了帖子的格式,如果没有,请帮助我更正。不确定这里的情况是否如此。。。当csv文件将
\r
作为行分隔符(旧版Mac行终止符)时,我会出现此错误。@bernie我在某个地方找到了一篇讨论此问题的帖子,我是否应该遍历所有csv并清除\r?该错误发生在哪一行?发布的错误不是在运行发布的代码时发生的,而是在我保存所有“df2”时发生的(每个单独的审查)到csv,然后当我尝试将这些csv读入Pandas时,我会得到错误。在保存到csv之前,可能会清除“\r”?不确定这里是否是这种情况…当csv文件具有\r
作为行分隔符(传统Mac行终止符)时,我会得到此错误@bernie我在某个地方找到了一篇讨论这一问题的帖子,我是否应该遍历所有CSV并清理\r?错误发生在哪一行?发布的错误不是在运行发布的代码时发生的,而是在我保存所有“df2”(每个单独的评论)时发生的到csv,然后当我尝试将这些csv读入Pandas时,我会得到错误。在保存到csv之前,可能会清除“\r”?