如何在Python中反转DataFrame指定列(第一列)的顺序
仅反转DataFrame第一列的实现方法
你之前用[::-1]会反转整个DataFrame的行顺序,导致所有列跟着反转。要只反转第一列(Frequency列),可以单独对该列的取值进行反转赋值,以下是两种可行的修改方式:
方法一:直接修改列值
在将列表转成DataFrame后,单独对Frequency列赋值反转后的结果:
import requests from bs4 import BeautifulSoup import pandas as pd data = [] soup = BeautifulSoup(requests.get("https://kworb.net/spotify/country/us_weekly.html").content, 'html.parser') for e in soup.select('#spotifyweekly tr:has(td)'): data.append({ 'Frequency':e.td.text, 'Artists':e.a.text, 'Songs':e.a.find_next_sibling('a').text }) data2 = data[:100] # 转成DataFrame并处理第一列反转 df = pd.DataFrame(data2) # 仅反转Frequency列的顺序 df['Frequency'] = df['Frequency'][::-1] # 保存到Excel df.to_excel('Kworb_Weekly.xlsx', index = False)
方法二:链式操作(assign方法)
如果喜欢更简洁的链式写法,可以用assign方法直接生成修改后的列:
import requests from bs4 import BeautifulSoup import pandas as pd data = [] soup = BeautifulSoup(requests.get("https://kworb.net/spotify/country/us_weekly.html").content, 'html.parser') for e in soup.select('#spotifyweekly tr:has(td)'): data.append({ 'Frequency':e.td.text, 'Artists':e.a.text, 'Songs':e.a.find_next_sibling('a').text }) data2 = data[:100] # 链式处理并保存 pd.DataFrame(data2).assign(Frequency=lambda x: x['Frequency'][::-1]).to_excel('Kworb_Weekly.xlsx', index = False)
这两种方式都只会改变Frequency列的元素顺序,Artists和Songs列会保持原有的对应关系不变。
内容的提问来源于stack exchange,提问作者Hi Hi try
相关产品推荐
相关产品推荐

