用列的中值替换 python 数据框中列中的所有 0 会将数据类型更改为 'O'
Replacing all 0s in a column in python dataframe with column's median value changes datatype to 'O'
我有一个大型 pandas 数据框,其中包含 10000 行和 33 列。
其中一列是 'Age',它具有数据类型 'int64' 和大量缺失值。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 33 columns):
customer 10000 non-null int64
age 10000 non-null int64
缺失值已在数据中记录为0。缺失值:
df['customer'][df[' age']==0].count()
>2942
我正在尝试将所有此类 0 替换为中值:
df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)
这似乎 运行 不错。但是它将列的数据类型更改为 O:
df[' age'].dtype
>dtype('O')
出了什么问题?
替换
df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)
和
df[' age'].replace(to_replace=0, value = df[' age'].median(), inplace = True)
这对我有用。
最好用 NaN 替换缺失数据,然后用中值填充那些 NaN 值。
否则你实际上是在考虑缺失数据来计算中位数
df = pd.DataFrame([0,1,2,3,], columns = ['data'])
df[df.data == 0] = np.nan
print(df)
data
0 NaN
1 1.0
2 2.0
3 3.0
df.fillna(df.median())
data
0 2.0
1 1.0
2 2.0
3 3.0
我有一个大型 pandas 数据框,其中包含 10000 行和 33 列。 其中一列是 'Age',它具有数据类型 'int64' 和大量缺失值。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 33 columns):
customer 10000 non-null int64
age 10000 non-null int64
缺失值已在数据中记录为0。缺失值:
df['customer'][df[' age']==0].count()
>2942
我正在尝试将所有此类 0 替换为中值:
df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)
这似乎 运行 不错。但是它将列的数据类型更改为 O:
df[' age'].dtype
>dtype('O')
出了什么问题?
替换
df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)
和
df[' age'].replace(to_replace=0, value = df[' age'].median(), inplace = True)
这对我有用。
最好用 NaN 替换缺失数据,然后用中值填充那些 NaN 值。
否则你实际上是在考虑缺失数据来计算中位数
df = pd.DataFrame([0,1,2,3,], columns = ['data'])
df[df.data == 0] = np.nan
print(df)
data
0 NaN
1 1.0
2 2.0
3 3.0
df.fillna(df.median())
data
0 2.0
1 1.0
2 2.0
3 3.0