python - 保持从 for loop pandas 返回的迭代项的索引
问题描述
我有一个数据集,我想从中提取一些 URL。问题是当我想将提取的值添加回数据帧时,行的索引不正确,因此提取的值不对应于正确的值
我的数据
username date text extracted_url
0 sports 2018-05-08 13:20 something google.com [google.com]
1 sports 2018-05-08 12:34 two links google.com yahoo.com [google.com, yahoo.com]
2 sports 2018-05-08 12:34 some text without links
3 sports 2018-05-08 12:34 google.com [google.com]
代码
import pandas as pd
import requests
import urllib, urlparse
from urlparse import urlsplit
my_file = pd.read_csv('my_file.csv', sep=';', engine='python', error_bad_lines=False)
df = pd.DataFrame(my_file)
text = my_file['text'].str.extract('(https?://[^>]+)' , expand=False).dropna()
print my_file
sep = ' :|\spic|#'
r = text.str.split(pat=sep, expand=False)
se = pd.Series(r)
links = []
item_ids = []
my_file['extracted_links'] = r
for index, row in r.iteritems():
link = row[0].replace(" ", "")
response = requests.get(link).url
base_url = "{0.scheme}://{0.netloc}/".format(urlsplit(response))
if base_url=="http://www.google.com/":
item_id = response.rsplit('/', 1)
links.append(response)
item_ids.append(item_id[-1])
else:
links.append('nan')
item_ids.append('nan')
df['links'] = pd.Series(links)
df['item_ids'] = pd.Series(item_ids)
df.to_csv('example.csv')
我得到的输出
extracted_url links
0 [google.com] google.com
1 [google.com, yahoo.com] google.com
2 google.com
3 [google.com]
预期输出:
extracted_url links
0 [google.com] google.com
1 [google.com, yahoo.com] google.com
2 nan nan
3 [google.com] google.com
解决方案
它现在可以使用以下代码按预期工作,尽管我不确定这是否是最优雅的解决方案
for index, row in r.iteritems():
link = row.replace(" ", "")
response = requests.get(link).url
base_url = "{0.scheme}://{0.netloc}/".format(urlsplit(response))
if base_url=="http://www.sxc.com/":
re = urllib.unquote(response.encode("ascii"))
item_id = re.rsplit('/', 1)
df['links'].loc[index] = re
df['item_ids'].loc[index] = item_id[-1]
推荐阅读
- python - 我将如何自定义 python json.dumps 将 dict 列表值转换为 str
- python - 使用 Pymssql 将具有 Null 值的记录插入 SQL Server 时出错
- html - 浏览器如何遍历 DOM 树来应用正确的样式?
- docker - Dockerfile 中的 VOLUME 是做什么的
- python - 如何将指令嵌套在另一个指令中,例如 .. code-block::
- python-3.x - 附加到 YAML 文件
- javascript - 使用 selenium-webdriver 在 javascript 中爬行
- php - 获取与客户在 Woocommerce 中购买的产品相关的订单 ID
- android - 屏幕方向更改时数据库条目损坏
- node.js - NodeJS/Puppeteer - 帮助点击元素