Python Pandas:如何将元组列转为单个浮点值而非列表
解决方法
1. 修正你的原代码
你当前代码外层多套了一层[],导致返回的是长度为1的列表。直接去掉外层方括号,next(...)本身就会返回单个浮点数(或默认的0):
df['Prices'] = [next((val for val in tup if val != 0), 0.0) for tup in df['Prices']]
2. 用Pandas的apply方法(更直观)
可以自定义函数或者用lambda表达式,对列中每个元组单独处理:
- 自定义函数版:
def get_nonzero(tup): for val in tup: if val != 0: return val return 0.0 df['Prices'] = df['Prices'].apply(get_nonzero)
- 简洁lambda版:
df['Prices'] = df['Prices'].apply(lambda tup: next((v for v in tup if v != 0), 0.0))
3. 针对固定长度元组的高效方法
如果你的元组都是固定2个元素,还可以拆分成两列后提取非零值,这种方法在数据量大时效率更高:
# 把元组拆成两列 df[['a', 'b']] = pd.DataFrame(df['Prices'].tolist(), index=df.index) # 优先取a列的非零值,a为0则取b列,都为0则留0 df['Prices'] = df['a'].where(df['a'] != 0, df['b']) # 删除临时列 df.drop(['a', 'b'], axis=1, inplace=True)
内容的提问来源于stack exchange,提问作者iBeMeltin
相关产品推荐
相关产品推荐

