如何解决如何解决用None填充所有值的问题?
我正在尝试在数据框中填充缺少的值,但是所有值被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[:,'First'] = df1.loc[:,'First'].fillna(method='ffill',inplace=True)
到
df1.loc[:,inplace=True)
这是因为您使用的是inplace = True,这意味着将对原始数据帧进行更改。
对于None值,它们来自函数,因为它就位返回None,没有任何返回值。因此,所有值都变为None。
对于每一列,
for col in df1.columns:
df1[col].fillna(10,inplace=True)
df1
PS:对于将来的用户,请避免就地使用,因为In pandas,is inplace = True considered harmful,or not?
,如果要转发填充,您可以执行以下操作:
df1 = df1.ffill()
结果是:
First Second Third
0 100.0 30.0 NaN
1 90.0 45.0 40.0
2 90.0 56.0 80.0
3 95.0 56.0 98.0
仍有一个nan值,所以我们仍然可以回填:
df1 = df1.bfill()
最终结果:
First Second Third
0 100.0 30.0 40.0
1 90.0 45.0 40.0
2 90.0 56.0 80.0
3 95.0 56.0 98.0
如果您只想转发特定列中的na,请使用以下内容。请注意,我没有使用inplace=True
。这就是为什么您的代码以前无法工作的原因。
columns_to_fillna = ['Second','Third']
df1.loc[:,columns_to_fillna] = df1.loc[:,columns_to_fillna].ffill()
如果您确实要使用inplace=True
(不建议这样做),请执行以下操作:
columns_to_fillna = ['Second',columns_to_fillna].ffill(inplace=True)
在这里讨论为什么不建议就地使用的原因:
https://stackoverflow.com/a/60020384/6366770
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。