Python中如何删除pandas DataFrame的nan值?dropna无效如何解决
问题原因说明
pandas的dropna()方法默认返回新的DataFrame,不会修改原对象,你原有代码中直接执行df.dropna()没有接收返回值也没加修改原对象的参数,所以原df的nan没有变化。- 如果你对整个DataFrame执行
dropna(),会删除所有包含空值的整行数据,由于你三列的有效长度不一致,这种操作会把所有列都截断到最短列的有效长度,不符合你各列单独保留所有有效值的需求。
解决方案
直接对单个列执行dropna()后转列表即可,代码如下:
import pandas as pd excel_name = r'file_name.xlsx' df = pd.read_excel(excel_name, engine='openpyxl') # 单列单独删除空值后转列表 clomun_1 = df['clomun1'].dropna().tolist() clomun_2 = df['clomun2'].dropna().tolist() clomun_3 = df['clomun3'].dropna().tolist() print(clomun_1) print(clomun_2) print(clomun_3)
如果你的输出中出现的是字符串类型的'nan'而非pandas原生的空值,可以额外加一层列表推导式过滤:
clomun_1 = [x for x in df['clomun1'].tolist() if str(x) != 'nan']
执行后输出结果为:
['value1', 'value2', 'value3', 'value4'] ['value1', 'value2', 'value3', 'value4', 'value5', 'value6'] ['value1', 'value2']
内容的提问来源于stack exchange,提问作者Nirevezs
相关产品推荐
相关产品推荐

