Python处理CSV列值求最低价格报错(TypeError),求解决方法
问题
我有一个包含产品数据的CSV文件,包含product_name、price、website三列。想要用Python获取最低价格,编写了如下代码但运行时报错:TypeError: list indices must be integers or slices, not Series,代码如下:
import pandas as pd data = pd.read_csv("product_list.csv") df = pd.DataFrame(data, columns= ['price']) df['price'] = pd.to_numeric(df['price'], errors='coerce') prices = 99 temp = [] for i in df: temp.append(df.price) for i in temp: if temp[i]<prices: prices = temp[i] print(prices)
问题分析与解决方案
错误原因
- 第一个循环
for i in df:遍历DataFrame时默认迭代列名,这里df仅包含price一列,循环仅执行一次,将整个df.price(Series对象)添加到temp列表,导致temp存储的是Series而非单个价格值。 - 第二个循环
for i in temp:此时i是Series对象,用temp[i]索引列表会触发类型错误,因为列表索引仅支持整数或切片。
最优实现(利用Pandas内置方法)
Pandas提供了直接获取最小值的方法,无需手动循环,代码简洁高效:
import pandas as pd # 读取CSV文件 data = pd.read_csv("product_list.csv") # 将price列转为数值类型,无效值转为NaN data['price'] = pd.to_numeric(data['price'], errors='coerce') # 获取最低价格,自动跳过NaN值 min_price = data['price'].min() print(f"最低价格为: {min_price}")
手动循环实现(仅作学习参考)
若坚持用循环逻辑,需遍历price列的每个具体值,而非列名或整个Series:
import pandas as pd data = pd.read_csv("product_list.csv") df = pd.DataFrame(data, columns=['price']) df['price'] = pd.to_numeric(df['price'], errors='coerce') # 初始化最低价格为无穷大,确保能被有效价格覆盖 min_price = float('inf') # 遍历去空后的价格值 for price in df['price'].dropna(): if price < min_price: min_price = price print(f"最低价格为: {min_price}")
内容的提问来源于stack exchange,提问作者Nursyasa Irsalina
相关产品推荐
相关产品推荐

