我有这个Pandas数据框。
technologies = [
("Spark", 22000,'30days',1000.0, 'Scala'),
("PySpark",25000,'50days',2300.0, 'Python'),
("Hadoop",23000,'55days',np.nan,np.nan)
]
df = pd.DataFrame(technologies,columns = ['Courses','Fee','Duration','Discount', 'Language'])
print(df)
Courses Fee Duration Discount Language
0 Spark 22000 30days 1000.0 Scala
1 PySpark 25000 50days 2300.0 Python
2 Hadoop 23000 55days NaN NaN
我感兴趣的是将每一行转换成一个dict。
def convert_to_dict(row) -> dict:
result = dict(row)
final_result = {k:v for k, v in result.items() if v is not np.nan}
print(final_result)
所以我用上面的函数和这个技巧
df.apply(lambda row: convert_to_dict(row), axis=1)
但我得到的结果很奇怪。
{'Courses': 'Spark', 'Fee': 22000, 'Duration': '30days', 'Discount': 1000.0, 'Language': 'Scala'}
{'Courses': 'PySpark', 'Fee': 25000, 'Duration': '50days', 'Discount': 2300.0, 'Language': 'Python'}
{'Courses': 'Hadoop', 'Fee': 23000, 'Duration': '55days', 'Discount': nan}
最后一行的Language和Discount均为Nan。
我原以为这两个都应该被过滤掉,但我看到只有语言被过滤掉了。
我如何从最终结果中过滤掉所有的列,这些列是nan过滤掉的?
3条答案
按热度按时间ajsxfq5m1#
使用
notna
过滤缺失值:w3nuxt5m2#
您可以使用
.to_dict('records')
并使用pandas.notna()
过滤nan
:afdcj2ne3#
输出: