在使用库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
答案 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