求助:如何按volume_24h降序排序加密货币CSV数据?
问题原因分析与解决方案
核心错误点
完全多余的循环
遍历DataFrame(for item in list)时,实际是在遍历列名(id、slug等),循环会重复执行多次但对排序毫无帮助——pandas的排序函数可以直接对整个DataFrame操作,根本不需要循环。pd.concat的误用pd.concat要求第一个参数是pandas对象的可迭代集合(比如列表),你直接传入多个Series,不符合参数规范,因此抛出TypeError。- 更关键的是:你的原DataFrame已经包含
slug、volume_24h这些列,完全不需要用concat重新组合,这一步属于无意义操作。
sort_values的inplace参数陷阱
当设置inplace=True时,sort_values会直接修改原DataFrame,并且返回None。所以new_list = list.sort_values(..., inplace=True)会让new_list变成None,打印自然没有内容。
正确代码实现
不需要复杂操作,两行代码就能完成需求:
import pandas as pd # 读取数据(注意:不要用list当变量名,它是Python内置类型,会覆盖原有功能) crypto_df = pd.read_csv("crypto_latests.csv") # 按volume_24h降序排序,返回新的DataFrame(不修改原数据) new_list = crypto_df.sort_values(by="volume_24h", ascending=False) # 可选:如果只需要指定列,先筛选再排序 new_list = crypto_df[["slug", "volume_24h", "market_cap", "last_updated"]].sort_values(by="volume_24h", ascending=False) # 打印结果 print(new_list)
补充说明
- 如果需要直接修改原数据,可单独执行:
crypto_df.sort_values(by="volume_24h", ascending=False, inplace=True),不需要赋值。 - 避免使用Python内置类型名(如
list、str)作为变量名,会引发潜在的语法问题。
内容的提问来源于stack exchange,提问作者BGX
相关产品推荐
相关产品推荐

