Python使用pandas对Birthplace列排序失败应如何解决?
问题解决说明
核心错误点
- pandas的
sort_values()方法默认返回新的排序后DataFrame,不会修改原变量,你现有代码没有接收排序结果,原df始终是未排序状态 - 最后一行
print (df.sort_values)打印的是方法本身,没有实际执行排序操作,也不会输出排序结果 - 冗余操作:你已经完成CSV到Excel的格式转换,无需重复读取刚生成的Excel文件,可直接操作读取CSV得到的DataFrame,减少不必要的IO耗时
修正后可运行代码
import os from pathlib import Path import pandas as pd username = os.getenv("username") filepath_in = Path(f'C:\\Users\\{username}\\Downloads\\demo.csv').resolve() filepath_out = Path(f'C:\\Users\\{username}\\Downloads\\demo.xlsx').resolve() # 读取CSV并直接完成排序,无需中转Excel df = pd.read_csv(filepath_in, delimiter=";") # 接收排序后的结果赋值给df,或者加inplace=True参数原地修改 df = df.sort_values(by='Birthplace', ascending=False, ignore_index=True) # 排序完成后再导出Excel df.to_excel(filepath_out, index=False) print(df.head()) # 打开Excel查看结果 absolutePath = filepath_out.resolve() os.system(f'start excel.exe "{absolutePath}"')
补充说明
如果想要原地修改原DataFrame不接收返回值,可以将排序语句改为:df.sort_values(by='Birthplace', ascending=False, ignore_index=True, inplace=True)
内容的提问来源于stack exchange,提问作者Lu Wei
相关产品推荐
相关产品推荐

