问题:数值填充
使用语言:python
我的思路:一个的表格一共有130个字段每个字段都有null nan 空值甚至还有点想一个一个字段写将null nan空值甚至还有点填补为众数但是这样会太慢了并且有的点就是众数所以想用for循环做、这样快点,如果众数是点就用value counts中的第二的数进行填充否则就用就用众数(第一个众数)填充。请问各位这个for循环怎么写?谢谢,有偿 谢谢
如果我的思路有什么问题欢迎各位指点
你看看是这个意思不?
import numpy as np
import pandas as pd
df = pd.DataFrame([[1, 2, 3, 'null'],
[1, 2, 'null', '.'],
[9, np.nan, 'nan', '.'],
[13, 14, 15, 16]])
print(df)
# 将字符串的nan和null替换成空值
df.replace('null', np.nan, regex=True, inplace=True)
df.replace('nan', np.nan, regex=True, inplace=True)
for col in df.columns:
a = df[col].mode()[0]
if a == '.':
# 将点替换成空值再求众数,因为 没有设置inplace=True不会改变df本身。
b = df[col].replace('.', np.nan).mode()[0]
# fillna() 方法来替换空值
df[col].fillna(value=b, inplace=True)
else:
df[col].fillna(value=a, inplace=True)
print(df)
可以先将null, nan , ‘. ’ 都替换成 空值np.nan,然后用众数替换就可以了,
import pandas as pd
import numpy as np
df = pd.read_csv('csv路径')
# 先替换所有的值为pd空值,然后对空值进行众数填充
df.replace(['nan','null','.'],np.nan,inplace=True)
df.fillna(df.mode(),inplace=True)
for 加上判断就OK了
描述清楚吧,这好歹有标点符号,前后连贯吧