问题描述
我有一个数据集,其中包含多个数值变量和多个有序数值变量。填充缺失值我想对数值变量使用均值,对有序数值变量使用中位数。使用以下代码,它们中的每一个都是单独创建的,不会收集到数据库中。
df = [['age','score'],[10,1],[20,""],["",0],[40,[50,3],[70,[80,[90,[100,1]]
df = pd.DataFrame(data[1:])
df.columns = data[0]
df = df[['age']].fillna(df.mean())
df = df[['score']].fillna(df.median())
解决方法
pandas.DataFrame.fillna
接受键为列名的字典,所以你可以这样做:
import pandas as pd
data = [['age','score'],[10,1],[20,None],[None,0],[40,[50,3],[70,[80,[90,[100,1]]
df = pd.DataFrame(data[1:],columns=data[0])
df = df.fillna({'age':df['age'].mean(),'score':df['score'].median()})
print(df)
输出
age score
0 10.0 1.0
1 20.0 1.0
2 57.5 0.0
3 40.0 1.0
4 50.0 0.0
5 57.5 3.0
6 70.0 1.0
7 80.0 1.0
8 90.0 0.0
9 100.0 1.0
请记住,空字符串与 NaN 不同,后者可能是使用 python 的 None
创建的。
首先将空字符串替换为缺失值,然后每列替换缺失值:
function adjustCorners(homeOrAway) {
let updatedMatchEvents = [...matchEvents];
let cornerEvent = {
isHome: homeOrAway,eventType: 1,playerId: 0,period: 1,minute: 0,second: 0,};
// Not event.target.value,pass the value
return (value) => {
if (homeOrAway === true) {
if (value < homeCorners) {
updatedMatchEvents.pop();
setMatchEvents(updatedMatchEvents);
} else {
updatedMatchEvents.push(cornerEvent);
setMatchEvents(updatedMatchEvents);
}
} else {
if (value < awayCorners) {
updatedMatchEvents.pop();
setMatchEvents(updatedMatchEvents);
} else {
updatedMatchEvents.push(cornerEvent);
setMatchEvents(updatedMatchEvents);
}
}
};
}
您还可以将 DataFrame.agg
用于 df = df.replace('',np.nan)
df['age'] = df['age'].fillna(df['age'].mean())
df['score'] = df['score'].fillna(df['score'].median())
print (df)
age score
0 10.0 1.0
1 20.0 1.0
2 57.5 0.0
3 40.0 1.0
4 50.0 0.0
5 57.5 3.0
6 70.0 1.0
7 80.0 1.0
8 90.0 0.0
9 100.0 1.0
的聚合值并传递给 DataFrame.fillna
:
Series