使用reset_index()失败
时间: 2023-05-19 22:02:47 浏览: 46
可能是因为你没有指定要重置的索引列,或者指定的索引列不是唯一的。你可以尝试指定要重置的索引列,或者使用drop=True参数删除原来的索引列。如果还有问题,可以提供更多的细节信息,以便更好地帮助你解决问题。
相关问题
news_dfs = pd.DataFrame() for i in range(1,10000): while True: try: page = i url = URL.format(page)###################变更点 news_df = GetOnePageInfo(url) news_dfs = news_dfs.append(news_df) news_dfs['Pubtime'] = pd.to_datetime(news_dfs['Pubtime']) print("第{}页爬取完成".format(i)) except: print("模块运行失败,正在重试...") time.sleep(5) continue else: break if news_dfs['Pubtime'].min() < pd.to_datetime('2022-06-01'): break news_dfs = news_dfs.reset_index(drop=True)如何设置当i重新运行5次后还是失败,直接跳出整个循环,执行循环之后的模块
您可以在 while 循环中添加一个计数器,记录尝试获取数据的次数,当计数器达到一定次数,比如 5 次,就直接跳出 while 循环和 for 循环,执行之后的代码。可以使用 break 和嵌套循环实现,具体代码如下:
```
news_dfs = pd.DataFrame()
for i in range(1,10000):
retry_count = 0 # 尝试获取数据的次数
while retry_count < 5:
try:
page = i
url = URL.format(page)
news_df = GetOnePageInfo(url)
news_dfs = news_dfs.append(news_df)
news_dfs['Pubtime'] = pd.to_datetime(news_dfs['Pubtime'])
print("第{}页爬取完成".format(i))
break # 获取数据成功,跳出 while 循环
except:
retry_count += 1
print("模块运行失败,正在重试...")
time.sleep(5)
else:
# 尝试次数超过 5 次,跳出 for 循环
print("获取数据失败,尝试次数超过 5 次,跳出循环")
break
if news_dfs['Pubtime'].min() < pd.to_datetime('2022-06-01'):
break
news_dfs = news_dfs.reset_index(drop=True)
```
在这个代码中,使用了一个 else 语句,这个语句会在 while 循环正常退出时执行,也就是说,如果 retry_count 小于 5,说明获取数据成功,就会执行 break 跳出 while 循环,else 语句不会执行;如果 retry_count 等于 5,说明获取数据失败,就会执行 else 语句,跳出 for 循环,执行之后的代码。
不是是否包含“识别成功”、“识别失败”或“未识别”,是不仅包含识别成功,还要包含其他的值
非常抱歉,再次理解有误。根据您的最新描述,可以使用以下代码实现您的需求:
```python
# 对 A、B、C 进行分组
grouped = df.groupby(['A', 'B', 'C'])
# 计算每组中 B 字段是否全部为“识别成功”
is_all_success = grouped['B'].apply(lambda x: set(x) == set(['识别成功']))
# 计算每组中 B 字段是否包含“识别成功”以外的其他值
is_not_only_success = grouped['B'].apply(lambda x: set(x).difference(set(['识别成功'])))
# 计算结果1和结果2
result1 = is_all_success.groupby('A').sum().reset_index(name='result1')
result2 = grouped['C'].nunique().groupby('A').sum().reset_index(name='result2')
# 计算结果3和结果4
result3 = is_not_only_success.groupby('A').nunique().reset_index(name='result3')
result4 = grouped['C'].nunique().groupby('A').sum().reset_index(name='result4')
```
其中,首先将 DataFrame 按 A、B、C 进行分组,并计算每组中 B 字段是否全部为“识别成功”(`is_all_success`)或是否包含“识别成功”以外的其他值(`is_not_only_success`)。然后,分别对结果1、结果2、结果3、结果4进行计算并存储到 DataFrame 中。
阅读全文