【发布时间】:2020-11-10 19:18:54
【问题描述】:
我正在尝试填充数据框中的缺失值,但所有值都被替换为None。
这是我尝试过的示例:
# Basic libraries
import os
import pandas as pd
import numpy as np
# Visualization libraries
import matplotlib.pyplot as plt
import seaborn as sns
import folium
#import folium.plugins as plugins
from wordcloud import WordCloud
import plotly.express as px
data_dict = {'First':[100, 90, np.nan, 95],
'Second': [30, 45, 56, np.nan],
'Third':[np.nan, 40, 80, 98]}
#reating a dataframe from list
df1 = pd.DataFrame(data_dict)
#first_try_with_column_name
df1.loc[:,'First'] = df1.loc[:,'First'].fillna(method='ffill', inplace=True)
#Second_try_Using_List_of_Columns
list_columns = ['First','Second','Third']
df1.loc[:,list_columns] = df1.loc[:,list_columns].fillna(value, inplace=True)
df1
如图所示,我用了多种方式来理解这个问题背后的原因,所以我尝试使用列名,然后我使用了列名列表,但不幸的是,问题是一样的。
请问有什么推荐的吗?
【问题讨论】:
-
您已经在原地指定,您不需要再次分配该值。那可能是个问题。 df1.loc[:,list_columns].fillna(value, inplace=True) 应该足够了。
-
请不要这样写代码!只需直接访问该列
df1['First'] = df1['First'].fillna(method='ffill')或更好:df1['First'] = df1['First'].ffill()。作为一般经验法则,如果您确实需要,请仅使用inplace=True。如果您经常使用inplace=True,将来您可能会遇到一些无法预料的问题,可能不是这段代码,而是其他代码。 -
如果您使用多列,
loc很好。你也可以df[list_columns] = df[list_columns].fillna() -
@DavidErickson 感谢您的评论。但是,最后一个命令
df[list_columns] = df[list_columns].fillna()没有成功运行,问题仍然存在。另外,我有兴趣使用inplace=True。那么,还有其他推荐吗?
标签: python python-3.x pandas dataframe missing-data