【问题标题】:Replacing all 0s in a column in python dataframe with column's median value changes datatype to 'O'用列的中值替换python数据框中列中的所有0将数据类型更改为“O”
【发布时间】:2018-11-20 16:15:35
【问题描述】:

我有一个包含 10000 行和 33 列的大型 pandas 数据框。 其中一列是“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'].median()pd.Series.median是一个方法,你必须调用它才能返回值。

标签: python pandas replace types median


【解决方案1】:

最好用 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

【讨论】:

    【解决方案2】:

    替换

    df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)

    df[' age'].replace(to_replace=0, value = df[' age'].median(), inplace = True)

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多