我有这个数据集
Name1 Name2 Score
John Chris 15.4
John Luke 11.0
John Martin 10.1
John Paul 8.7
John Patty 8.0
Patty Stephanie 21.6
Patty Mila 21.6
Patty Martin 19.7
Patty Chris 17.2
Patty Luke 15.9
Meghan Kate 5.0
Meghan Chris 4.2
Meghan William 4.1
Meghan John 3.2
Meghan Stephen 3.0
我确定了不同的值和差异:
next_name2 = df['Name2']
name1 = df['Name1']
distinct_name1 = set(name1)
diff = set(next_name2) - distinct_name1
得到
diff = {'Stephen', 'Martin', 'Chris', 'Stephanie', 'Paul', 'Luke', 'Mila', 'Kate', 'William'}
由于diff的长度大于0,因此我运行以下命令:
while len(diff) > 0:
new_run= [fun(x) for x in diff]
next_name2.append(new_run)
name1.append(diff)
unique_source.update(diff)
但我得到了一个错误:
TypeError: string indices must be integers
函数fun
具有以下结构:
name2_list, score_list = [],[]
def fun(df):
for x in df['Name1']:
url = "https://www.website.com/siteinfo/"+ x
soup = BeautifulSoup(requests.get(url).content, "html.parser")
name_i = soup.select("#card_mini_audience .site>a")
score_i = soup.select("#card_mini_audience .overlap>.truncation")
name_i = [name_x.text.strip() for name_x in name_i]
score_i = [float(score_x.text.strip()) for score_x in score_i]
for pair in zip(name_i, score_i):
print(pair)
name2_list.append(name_i)
score_list.append(score_i)
return name2_list, score_list.append
每次运行该函数时,我都会得到如下列表:
对于x = Stephen
('Julie', 31.9)
('Mike', 30.9)
('Catherine', 30.7)
('Molly', 29.0)
对于x = Martin
:
('John', 34)
对于x = Chris
:
('Luke', 12)
('Jane', 32)
等等,for x in diff
。
当所有的name2
都在列表中时,即len(diff)
为0时,while循环应该结束
这个错误似乎是由for x in df['Name1']:
引起的,我认为问题在于,每次我在while循环中运行函数时,我都会将值表示为列表。
那么比如说,
Name1 Name2 Score
John Chris 15.4
John Luke 11.0
John Martin 10.1
John Paul 8.7
John Patty 8.0
Patty Stephanie 21.6
Patty Mila 21.6
Patty Martin 19.7
Patty Chris 17.2
Patty Luke 15.9
Meghan Kate 5.0
Meghan Chris 4.2
Meghan William 4.1
Meghan John 3.2
Meghan Stephen 3.0
Stephen ['Julie','Mike','Catherine','Molly'] [31.9,30.9,30.7,29.0]
Martin ['John'] [34]
Chris ['Luke','Jane'] [12, 32]
所以它需要扩展(每次,直到我在Name1
列中拥有所有的name2)
你知道我如何解决这个问题吗
在这一行中,您使用来自
diff
的项调用函数,这显然是一组字符串:但是,看起来
fun()
希望它的参数是PandasDataFrame
对象为了解决此问题,需要使用正确的参数调用函数
如果没有更多的信息,就不可能告诉你怎么做。你是想这样定义
fun()
吗在这种情况下,您应该这样调用它(假设
df
在范围的其他地方定义):作为一般编程建议,我建议您在代码中添加注释和docstrings,以帮助您跟踪不同变量的含义及其类型。如果需要,您甚至可以向代码中添加type hints,并使用类似MyPy的工具来检查它们
相关问题 更多 >
编程相关推荐