将pandas.DataFrame的NaN值替换为列表

时间:2017-02-10 19:41:15

标签: python pandas

在使用库pandas的python脚本中,我有一个数据集,让我们说100行有一个特征" X",包含36个NaN值,以及36号的清单。

我想替换列的所有36个缺失值" X"通过我列表中的36个值。

这可能是一个愚蠢的问题,但我经历了所有的文档,无法找到方法。

以下是一个例子:

INPUT

Data:   X      Y
        1      8
        2      3
        NaN    2
        NaN    7
        1      2
        NaN    2

填料

List: [8, 6, 3]

输出

Data:   X      Y
        1      8
        2      3
        8      2
        6      7
        1      2
        3      2

3 个答案:

答案 0 :(得分:7)

从您的数据框<%= stylesheet_link_tag 'application', media: 'all' %>

开始
df

定义要填充的值(注意:print(df) X Y 0 1.0 8 1 2.0 3 2 NaN 2 3 NaN 7 4 1.0 2 5 NaN 2 列表中的元素数量与数据框中的filler值必须相同)

NaN

过滤您的列(包含filler = [8, 6, 3] 值)并使用NaN

覆盖所选行

<击> filler

df.X[df.X.isnull()] = filler

给出:

df.loc[df.X.isnull(), 'X'] = filler

答案 1 :(得分:1)

这可能不是有效的,但仍然有效:) 首先找到Nan的所有索引并在循环中替换它们。假设列表总是大于Nan的数量

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [np.nan, 1, 2], 'B': [10, np.nan, np.nan], 'C': [[20, 21, 22], [23, 24, 25], np.nan]})
lst=[12,35,78]

index = df['B'].index[df['B'].apply(np.isnan)] #find Index
cnt=0
for item in index:
    df.set_value(item, 'B', lst[item]) #replace Nan of the nth index with value from Nth value from list
    cnt=cnt+1

print df

     A     B             C
0  NaN  10.0  [20, 21, 22]
1  1.0   NaN  [23, 24, 25]
2  2.0   NaN           NaN

输出。

     A     B             C
0  NaN  10.0  [20, 21, 22]
1  1.0  35.0  [23, 24, 25]
2  2.0  78.0           NaN

答案 2 :(得分:1)

您必须使用迭代器作为索引标记,以使用自定义列表中的值替换您的NaN:

import numpy as np
import pandas as pd

your_df = pd.DataFrame({'your_column': [0,1,2,np.nan,4,6,np.nan,np.nan,7,8,np.nan,9]})  # a df with 4 NaN's
print your_df

your_custom_list = [1,3,6,8]  # custom list with 4 fillers

your_column_vals = your_df['your_column'].values

i_custom = 0  # starting index on your iterator for your custom list
for i in range(len(your_column_vals)):
    if np.isnan(your_column_vals[i]):
        your_column_vals[i] = your_custom_list[i_custom]
        i_custom += 1  # increase the index

your_df['your_column'] = your_column_vals

print your_df

输出:

    your_column
0           0.0
1           1.0
2           2.0
3           NaN
4           4.0
5           6.0
6           NaN
7           NaN
8           7.0
9           8.0
10          NaN
11          9.0
    your_column
0           0.0
1           1.0
2           2.0
3           1.0
4           4.0
5           6.0
6           3.0
7           6.0
8           7.0
9           8.0
10          8.0
11          9.0