我正在处理一个大型数据集,其中包含许多不同类型的列。数字值和带有一些NULL值的字符串混合在一起。我需要根据类型将NULL值更改为Blank或0。
1 John 2 Doe 3 Mike 4 Orange 5 Stuff
9 NULL NULL NULL 8 NULL NULL Lemon 12 NULL
我希望它看起来像这样
1 John 2 Doe 3 Mike 4 Orange 5 Stuff
9 0 8 0 Lemon 12
我可以为每个人执行此操作,但是由于我要提取具有数百个列的几个非常大的数据集,因此我想采用其他方法。
编辑: 来自较小数据集的类型,
Field1 object
Field2 object
Field3 object
Field4 object
Field5 object
Field6 object
Field7 object
Field8 object
Field9 object
Field10 float64
Field11 float64
Field12 float64
Field13 float64
Field14 float64
Field15 object
Field16 float64
Field17 object
Field18 object
Field19 float64
Field20 float64
Field21 int64
答案 0 :(得分:4)
对数字列使用DataFrame.select_dtypes
,按子集过滤并将值替换为0
,然后将所有其他列重新填充为空字符串:
print (df)
0 1 2 3 4 5 6 7 8 9
0 1 John 2.0 Doe 3 Mike 4.0 Orange 5 Stuff
1 9 NaN NaN NaN 8 NaN NaN Lemon 12 NaN
print (df.dtypes)
0 int64
1 object
2 float64
3 object
4 int64
5 object
6 float64
7 object
8 int64
9 object
dtype: object
c = df.select_dtypes(np.number).columns
df[c] = df[c].fillna(0)
df = df.fillna("")
print (df)
0 1 2 3 4 5 6 7 8 9
0 1 John 2.0 Doe 3 Mike 4.0 Orange 5 Stuff
1 9 0.0 8 0.0 Lemon 12
另一种解决方案是创建替换字典:
num_cols = df.select_dtypes(np.number).columns
d1 = dict.fromkeys(num_cols, 0)
d2 = dict.fromkeys(df.columns.difference(num_cols), "")
d = {**d1, **d2}
print (d)
{0: 0, 2: 0, 4: 0, 6: 0, 8: 0, 1: '', 3: '', 5: '', 7: '', 9: ''}
df = df.fillna(d)
print (df)
0 1 2 3 4 5 6 7 8 9
0 1 John 2.0 Doe 3 Mike 4.0 Orange 5 Stuff
1 9 0.0 8 0.0 Lemon 12
答案 1 :(得分:0)
对于df中的数字列,请执行以下操作:
import numpy as np
df[numeric_cols_list] = df[numeric_cols_list].replace(np.nan, 0)
如果它是字符串NULL,请执行以下操作:
df[string_cols] = df[string_cols].replace('NULL', 0)
我没有输入带有实际名称的整个numeric_cols_list和string_list。
答案 2 :(得分:0)
您可以尝试为每个不同的列替换一个不同的值(A
至C
是数字,而D
是字符串):
import pandas as pd
import numpy as np
df_pd = pd.DataFrame([[np.nan, 2, np.nan, '0'],
[3, 4, np.nan, '1'],
[np.nan, np.nan, np.nan, '5'],
[np.nan, 3, np.nan, np.nan]],
columns=list('ABCD'))
df_pd.fillna(value={'A':0.0,'B':0.0,'C':0.0,'D':''})