DataTables:将NaN转换为其他内容

时间:2017-09-19 00:13:46

标签: javascript python pandas datatables

我有以下pandas DataFrame:

df = pd.DataFrame({'name': ['Johnny', 'Michelle'},
                   'quiz': [10, np.nan],
                   'test': [np.nan, 49]})

我将此数据传递给DataTables表。如何将NaN转换为更具可读性的内容?我尝试过使用defaultContent选项,但这似乎只适用于完全缺失的数据。我的实际表也有很多列。如果有一种更简单的方法将此更改应用于整个表(所有列)而不是为每列明确定义它,那么这也很有用(http://jsfiddle.net/ndaboky3/3/)。

$('.display').DataTable({
  data: data,
  columns: [
    {data: 'name'},
    {data: 'quiz',
     defaultContent: 'No Data'
    },
    {data: 'test',
     defaultContent: 'No Data'
    }]
})

2 个答案:

答案 0 :(得分:0)

您可以创建一个递归函数来替换所有深度的对象值,例如

(function rec(d) {
  $.each(d, function(k, v) {
    if (typeof v === 'object') return rec(v)
    if (isNaN(v) && typeof v === 'number') d[k] = 'No Data';
  })
})(data);

FIDDLE

答案 1 :(得分:0)

您可以使用fillna更改pandas DataFrame中的所有NaN:

import numpy as np
import pandas as pd
df = pd.DataFrame({
    'name': ['Johnny', 'Michelle'],
    'quiz': [10, np.nan],
    'test': [np.nan, 49]
})

filled = df.fillna('no data')

然后你得到:

print(filled)
       name     quiz     test
0    Johnny       10  no data
1  Michelle  no data       49

一个警告是,它与你的dtypes混淆,我不确定这在你的背景下是否重要。