【问题标题】:For loop to change dataframe columnsFor循环更改数据框列
【发布时间】:2020-09-19 02:15:27
【问题描述】:

我有一个数据框,其中包含多个具有空值的列。我使用以下代码来获取特定列及其数据类型。我的数据框在这里称为数据。

missing = data.columns[data.isnull().any()].tolist()

data_type_dict = {}
for i in missing:
    print({i:data[i].isnull().sum()})
    data_type_dict.update({i:data[i].dtypes})
print(data_type_dict)

现在我想将空值替换为我的数字列的中位数,以及类型对象的模式。我希望根据数据类型将其拆分为第一个,因此 float 是分开的,而 object 是分开的。这就是我为此所做的。我只发一个,比较短,我做了两个 dfs。

lisnum = data[['MasVnrArea','GarageYrBlt']]

现在,首先,另一个更长,所以它不仅仅是两列的问题。为此,我想获取每列的中位数并用中位数替换空值。我希望在 for 循环中做到这一点。 基本上我想做这样的事情:

data['MasVnrArea'].fillna(median, inplace = True)

但对于 lisnum 的每一列都有一个 for 循环。

【问题讨论】:

    标签: python pandas jupyter-notebook jupyter spyder


    【解决方案1】:

    不需要for循环

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'x': [1,2, np.nan, 4,5,6],
                    'y': [1,2,4,5,6, np.nan],
                    'z': [np.nan, 1,0,1,0,1]})
    df.fillna(df.median(), inplace=True)
    

    这适用于所有列。

    【讨论】:

    • 您好 PalimPalim,谢谢,这有效。我只是有一个后续问题,如果你知道的话。在您的示例中,它只是 df.在我的中,我有 data 作为我的原始数据集,而 lisobj 作为一个数据集,其中包含所有具有空值的列。我想要对数据进行永久更改。那么你把df放在哪里,我是用data还是lisobj?
    • 我认为你可以在两者上使用它,但我会这样做data.fillna(data.median(), inplace=True) 代码也应该适用于没有任何 na 值的列
    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多