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

use*_*759 176 python nan dataframe pandas

我有一个Pandas Dataframe,如下所示:

    1    2       3
 0  a  NaN    read
 1  b    l  unread
 2  c  NaN    read
Run Code Online (Sandbox Code Playgroud)

我想用空字符串删除NaN值,以便它看起来像这样:

    1    2       3
 0  a   ""    read
 1  b    l  unread
 2  c   ""    read
Run Code Online (Sandbox Code Playgroud)

fan*_*ous 286

稍微短一点是:

df = df.fillna('')
Run Code Online (Sandbox Code Playgroud)

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

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

df.fillna('', inplace=True)
Run Code Online (Sandbox Code Playgroud)

  • @Mithril - `df [['column1','column2']] = df [['column1','column2']].fillna('')` (4认同)
  • @jss367这不是由于这段代码,而是因为您之前创建了较大 df 的部分视图。这里的答案非常好/sf/answers/3776849051/ (3认同)
  • 这给了我“SettingWithCopyWarning” (2认同)

nEO*_*nEO 202

import numpy as np
df1 = df.replace(np.nan, '', regex=True)
Run Code Online (Sandbox Code Playgroud)

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

  • @CaffeineConnoisseur - 或者只是`pd.np.nan`,如果你不想`导入numpy`那么. (20认同)
  • @CaffeineConnoisseur:`import numpy as np`. (7认同)
  • @CaffeineConnoisseur、@elPastor - “pandas 1.0.3”警告未来版本中“pandas.np”将被弃用。拥有它真是太好了! (3认同)
  • 从 1.0.0 开始,您还可以使用 `pd.NA` 代替 `pd.np.nan` (3认同)
  • 提到`... inplace = True`选项也很有用。 (2认同)

Nat*_*hat 84

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

  1. df.read_csv(path , na_filter=False)
  2. df.read_excel(path , na_filter=False)

这会自动将空字段视为空字符串''


如果您已经拥有Dataframe

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


Ste*_*ist 10

使用格式化程序,如果您只想对其进行格式化,以便在打印时呈现良好的效果。只需使用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)})
Run Code Online (Sandbox Code Playgroud)

要得到:

   A B       C
0  a      read
1  b 1  unread
2  c      read
Run Code Online (Sandbox Code Playgroud)

  • `print df.fillna('')` 本身(不做 `df = df.fillna('')`)也不会修改原始文件。使用“to_string”有速度或其他优势吗? (4认同)

Vin*_* TP 7

尝试这个,

添加inplace=True

import numpy as np
df.replace(np.NaN, '', inplace=True)
Run Code Online (Sandbox Code Playgroud)