Pandas用空白/空字符串替换NaN

时间:2014-11-10 06:29:26

标签: python pandas dataframe nan

我有一个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

8 个答案:

答案 0 :(得分:236)

稍微短一些:

df = df.fillna('')

或只是

df.fillna('',inplace=True)

这将用''填充na(例如NaN)。

如果要填充单个列,可以使用:

df[column1] = df.column1.fillna('')

答案 1 :(得分:158)

import numpy as np
df1 = df.replace(np.nan, '', regex=True)

这可能会有所帮助。它将用空字符串替换所有NaN。

答案 2 :(得分:72)

如果您正在从文件(例如CSV或Excel)中读取数据框,请使用:

  1. df.read_csv(path , na_filter=False)
  2. df.read_excel(path , na_filter=False)
  3. 这会自动将空字段视为空字符串' '

    如果您已经拥有Dataframe

    • df = df.replace(np.nan, '', regex=True)
    • df = df.fillna('')

答案 3 :(得分:2)

使用格式化程序,如果您只想对其进行格式化,以使其在打印时呈现良好效果。只需使用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

答案 4 :(得分:1)

尝试一下

添加inplace=True

import numpy as np
df.replace(np.NaN, ' ', inplace=True)

答案 5 :(得分:0)

如果您要将DataFrame转换为JSON,NaN会出错,因此在此用例中最好的解决方案是将NaN替换为None
方法如下:

df1 = df.where((pd.notnull(df)), None)

答案 6 :(得分:0)

使用keep_default_na=False应该可以帮助您:

df = pd.read_csv(filename, keep_default_na=False)

答案 7 :(得分:0)

我尝试用nan来处理一列字符串值。

要删除nan并填充空字符串:

df.columnname.replace(np.nan,'',regex = True)

要删除nan并填写一些值:

df.columnname.replace(np.nan,'value',regex = True)

我也尝试了df.iloc。但它需要列的索引。所以您需要再次查看表格。简单地,上述方法减少了一个步骤。