我有一个Pandas Dataframe,如下所示:
1 2 3
0 a NaN read
1 b l unread
2 c NaN read
我想用空字符串删除NaN值,以便它看起来像这样:
1 2 3
0 a "" read
1 b l unread
2 c "" read
稍微短一点是:
df = df.fillna('')
要不就
df.fillna('',inplace=True)
这将用''填充na(例如NaN)。
如果要填充单个列,可以使用:
df[column1] = df.column1.fillna('')
@Mithril - df[[column1,column2]] = df[[column1,column2]].fillna()
最好的答案!
import numpy as np
df1 = df.replace(np.nan, '', regex=True)
这可能有所帮助。它将用空字符串替换所有NaN。
np.nan来自哪个库?我不能用它
@CaffeineConnoisseur:import numpy as np。
@CaffeineConnoisseur - 或者只是pd.np.nan如果你不想import numpy那么。
这也允许将Dict保存为.csv行中的字符串,然后使用pd.DataFrame.from_dict(eval(_string_))将其读回DataFrame
提及... inplace=True选项也很有用。
如果您正在从文件(例如CSV或Excel)中读取数据框,请使用:
df.read_csv(path , na_filter=False)
df.read_excel(path , na_filter=False)
这会自动将空字段视为空字符串''
如果您已经拥有Dataframe
df = df.replace(np.nan, '', regex=True)
df = df.fillna('')
read_excel()上没有na_filter pandas.pydata.org/pandas-docs/stable/
我在我的申请中使用过它。它确实存在,但由于某种原因,他们没有在文档中给出这个论点。尽管没有错误,它对我很好。
它工作,我在解析xl.parse(sheet_name, na_filter=False)中使用它
很好的答案,但我意外地downvoted,现在不能upvote。
使用格式化程序,如果您只想格式化它,以便在打印时可以很好地呈现。只需使用df.to_string(... formatters定义自定义字符串格式,而无需不必要地修改DataFrame或浪费内存:
df = pd.DataFrame({
'A': ['a', 'b', 'c'],
'B': [np.nan, 1, np.nan],
'C': ['read', 'unread', 'read']})
print df.to_string(
formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})
要得到:
A B C
0 a read
1 b 1 unread
2 c read
这是正确的答案
print df.fillna()本身(不做df = df.fillna())也不会修改原件。使用to_string有速度或其他优势吗?
很公平,df.fillna()就是这样!
@shadowtalker:不一定,如果OP想要将df保持为一种格式(例如,计算效率更高,或者在不必要/空/重复的字符串上保存内存),那么它只会是正确的答案,而是在视觉上呈现更多赏心悦目的。在不了解用例的情况下,我们无法肯定地说。
尝试这个,
添加inplace=True
import numpy as np
df.replace(np.NaN, ' ', inplace=True)
我尝试使用nan的一列字符串值。
要删除nan并填充空字符串:
df.columnname.replace(np.nan,'',regex = True)
要删除nan并填充一些值:
df.columnname.replace(np.nan,'value',regex = True)
我也试过df.iloc。但它需要列的索引。所以你需要再次查看表格。只需将上述方法缩小一步即可。
使用keep_default_na=False可以帮助您:
df = pd.read_csv(filename, keep_default_na=False)
如果要将DataFrame转换为JSON,NaN将给出错误,因此在此用例中最好的解决方案是将NaN替换为None。
方法如下:
df1 = df.where((pd.notnull(df)), None)