Python 将字典转换为dataframe-但dataframe不显示列格式
我正在致力于将字典转换为数据帧-但数据帧不显示列格式 我希望像Image1(我做的另一个例子),但数据显示为Image2 在第一个示例(Image1)中,我使用一个URL作为新闻源 在第二个示例(Image2)中,我有一个for循环来解析新闻源的多个URL 我还看到第二个示例中的字典有2个“[]”,而第一个字典只有一个[] 我可以提供更多的细节。 如果可以的话,请帮助我 提前谢谢大家 此处提取实体功能代码:Python 将字典转换为dataframe-但dataframe不显示列格式,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我正在致力于将字典转换为数据帧-但数据帧不显示列格式 我希望像Image1(我做的另一个例子),但数据显示为Image2 在第一个示例(Image1)中,我使用一个URL作为新闻源 在第二个示例(Image2)中,我有一个for循环来解析新闻源的多个URL 我还看到第二个示例中的字典有2个“[]”,而第一个字典只有一个[] 我可以提供更多的细节。 如果可以的话,请帮助我 提前谢谢大家 此处提取实体功能代码: def extractEntities(url): endpoint_wat
def extractEntities(url):
endpoint_watson = "https://gateway.watsonplatform.net/natural-language-understanding/api/v1/analyze"
params = {
'version': '2020-09-12',
}
headers = {
'Content-Type': 'application/json',
}
watson_options = {
"url": url,
"features": {
"entities": {
"sentiment": True,
"emotion": True,
"limit": 100
}
}
}
username = "apikey"
password = "<<myAPIKeyinfo>>"
resp = requests.post(endpoint_watson,
data=json.dumps(watson_options),
headers=headers,
params=params,
auth=(username, password)
)
results = resp.json()
article_dict = []
if "entities" in results:
for i in results.get('entities'):
initial_dict = {}
initial_dict['entity'] = i['text']
initial_dict['url'] = url
initial_dict['source'] = url.split('.')[1]
initial_dict['relevance'] = i['relevance']
initial_dict['sentiment'] = i['sentiment']['score']
article_dict.append(initial_dict)
return article_dict
下面是调用extractEntities函数的代码。它还包含另一个for循环:
dict1 = []
for u in range(len(allurls3)):
data3 = []
url3 = allurls3[u]
data3 = extractEntities(url3)
dict1.append(data3)
dict1
谢谢你发布代码。在未来,并试图使它成为一个。我没有Watson API密钥,因此无法完全复制您的示例,但is的基本功能如下: 在
extractEntities(url)
中,您对Watson NLP服务进行API调用,并为响应中找到的每个实体创建一个具有相关性、情感等的字典。最后返回所有这些词典的列表。根据您提供的代码,让我们创建一个虚拟函数来模拟它,以便我可以尝试重现您遇到的问题
import random
import pandas as pd
def extractEntities(url):
article_dict = [] # actually a list, not a dict!!
for entity in ('Senate', 'CNN', 'Hillary Clinton', 'Bill Clinton'):
initial_dict = {}
initial_dict['entity'] = entity
initial_dict['url'] = url
initial_dict['source'] = url.split('.')[1]
initial_dict['relevance'] = random.random()
initial_dict['sentiment'] = random.random()
article_dict.append(initial_dict)
return article_dict # returns a list of dictionaries
示例输出是字典列表:
>>> extractEntities('https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html')
[{'entity': 'Senate',
'relevance': 0.4000160139190754,
'sentiment': 0.012884391182820587,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'CNN',
'relevance': 0.44921272670354884,
'sentiment': 0.40996636370319894,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Hillary Clinton',
'relevance': 0.4892046288027784,
'sentiment': 0.5424038672663258,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Bill Clinton',
'relevance': 0.7237361288162582,
'sentiment': 0.8269245953553733,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'}]
现在,您在allurls3
中有一个URL列表,并执行以下操作:
- 您创建了一个名为dict1的空列表,这个列表非常混乱
- 在
allurls3
- 在该URL上调用
,extractEntities
现在包含一个字典列表(见上文)data3
- 将该词典列表附加到列表
。 最终结果是词典列表:dict1
dict1
包装到另一个列表中,将其转换为数据帧
>>> pd.set_option('max_colwidth', 800)
>>> articles_df1 = pd.DataFrame([dict1])
>>> articles_df1
好的,现在我已经能够重现你的错误,我可以告诉你如何修复它。从您发布的第一张图片中可以看出,您需要提供pd.DataFrame
字典列表,而不是像现在这样提供字典列表列表
此外,给列表命名dict1
非常令人困惑。因此,请执行以下操作。关键区别在于使用
现在,您有了一个字典列表,可用于创建数据帧:
>>> pd.set_option('max_colwidth', 800)
>>> articles_df1 = pd.DataFrame(entities)
>>> articles_df1
非常感谢@biogeek。我的for循环如下。。请您指导我如何修改循环以避免列表中的列表
dict1=[]范围内的u(len(allurls3)):data3=[]url3=allurls3[u]data3=extractEntities(url3)dict1。append(data3)dict1
1)请用for循环的代码更新您的问题。将其发布到评论中会删除必要的格式。2) 这是一个公共论坛,我们不做私人评论。在此处发布您的代码,以便将来其他人可以从您的问题和答案中学习。3)您似乎对列表和dict
有一个基本的误解。或者使用变量dict1
作为空列表[]
,您会有一种奇怪的幽默感。感谢info@biogeek。谢谢。我刚发了我的代码谢谢你的帮助。我有一个缩进错误。这引起了一些问题。。现在修好了。万分感谢
>>> allurls3 = ['https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html', 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305']
>>>> dict1 = []
>>>> for u in range(len(allurls3)):
>>> data3 = []
>>> url3 = allurls3[u]
>>> data3 = extractEntities(url3)
>>> dict1.append(data3)
>>> dict1
[[{'entity': 'Senate',
'relevance': 0.19115763152061027,
'sentiment': 0.557935869111337,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'CNN',
'relevance': 0.9259134250004917,
'sentiment': 0.8605677705216526,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Hillary Clinton',
'relevance': 0.6071084891165042,
'sentiment': 0.04296592154310419,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Bill Clinton',
'relevance': 0.9558183603396242,
'sentiment': 0.42813857092335783,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'}],
[{'entity': 'Senate',
'relevance': 0.5060582500660554,
'sentiment': 0.9240451580369043,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'},
{'entity': 'CNN',
'relevance': 0.03956002547473547,
'sentiment': 0.5337343576461046,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'},
{'entity': 'Hillary Clinton',
'relevance': 0.6706912125534789,
'sentiment': 0.7721987482202004,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'},
{'entity': 'Bill Clinton',
'relevance': 0.37377943134631464,
'sentiment': 0.7114485187747178,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'}]]
>>> pd.set_option('max_colwidth', 800)
>>> articles_df1 = pd.DataFrame([dict1])
>>> articles_df1
>>> entities = []
>>> for url3 in allurls3:
>>> data3 = extractEntities(url3)
>>> entities.extend(data3)
>>> entities
[{'entity': 'Senate',
'relevance': 0.11594421982738612,
'sentiment': 0.2917557430217993,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'CNN',
'relevance': 0.5741596155387597,
'sentiment': 0.7743716765722405,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Hillary Clinton',
'relevance': 0.2535272395046557,
'sentiment': 0.2570270764910251,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Bill Clinton',
'relevance': 0.2275111369786037,
'sentiment': 0.03312536097047081,
'source': 'cnn',
'url': 'https://us.cnn.com/2020/09/15/politics/donald-trump-biden-retweet/index.html'},
{'entity': 'Senate',
'relevance': 0.8197309413723833,
'sentiment': 0.9492436947284604,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'},
{'entity': 'CNN',
'relevance': 0.7317312596198684,
'sentiment': 0.5052344447199512,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'},
{'entity': 'Hillary Clinton',
'relevance': 0.3572239446181651,
'sentiment': 0.056131606725058014,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'},
{'entity': 'Bill Clinton',
'relevance': 0.761777835912902,
'sentiment': 0.28138007550393573,
'source': 'wsj',
'url': 'https://www.wsj.com/articles/hurricane-sally-barrels-into-alabama-11600252305'}]
>>> pd.set_option('max_colwidth', 800)
>>> articles_df1 = pd.DataFrame(entities)
>>> articles_df1