【问题标题】:Creating new DataFrame from existing dataframe without missing values从现有数据框创建新的数据框而不缺少值
【发布时间】:2017-09-29 12:01:51
【问题描述】:

我坚持很明显的任务。

我有一个缺少数据的 df。为了处理此类数据,我想测试两个数据帧。

对于第一个 X_real_zeros - 我将缺失替换为 0。 对于第二个 X_real_means - 使用列的平均值。

我已将所有数字列名称收集在一个数组中

numeric_cols = ['RFCD.Percentage.1', 'RFCD.Percentage.2', 'RFCD.Percentage.3', 
                'RFCD.Percentage.4', 'RFCD.Percentage.5',
                'SEO.Percentage.1', 'SEO.Percentage.2', 'SEO.Percentage.3',
                'SEO.Percentage.4', 'SEO.Percentage.5',
                'Year.of.Birth.1', 'Number.of.Successful.Grant.1', 'Number.of.Unsuccessful.Grant.1']

然后我尝试创建两个数据帧。

data = pd.read_csv('data.csv')
X_real_zeros = data
for col in numeric_cols:
    X_real_zeros[col] = data[col].fillna(0)

X_real_means = data
a = calculate_means(data[numeric_cols])
for col in numeric_cols:
    print(a[col], col)
    X_real_means[col] = data[col].fillna(a[col])

但是,当我想创建第二个时,事实证明,我的 data 数据框已被修改。无论如何,我认为我的方法不准确,解决此类任务的正确方法是什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用

    X_real_means = data.copy()
    

    否则,变量X_real_means 将引用与data 完全相同的对象。

    Wes Mickenny 在这里回答了类似的问题:pandas dataframe, copy by value


    修改后的整体代码如下:

    data = pd.read_csv('data.csv')
    X_real_zeros = data.copy()
    for col in numeric_cols:
        X_real_zeros[col] = data[col].fillna(0)
    
    X_real_means = data.copy()
    a = calculate_means(data[numeric_cols])
    for col in numeric_cols:
        print(a[col], col)
        X_real_means[col] = data[col].fillna(a[col])
    

    【讨论】:

      【解决方案2】:

      我想这就是你需要做的一切:

      data = pd.read_csv('data.csv')
      X_real_zeros = data.copy()
      for col in numeric_cols:
          X_real_zeros[col] = data[col].fillna(0)
      
      X_real_means = data.copy()
      a = calculate_means(data[numeric_cols])
      for col in numeric_cols:
          print(a[col], col)
          X_real_means[col] = data[col].fillna(a[col])
      

      【讨论】:

        猜你喜欢
        • 2021-09-08
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        • 2023-01-30
        • 2022-01-18
        • 1970-01-01
        相关资源
        最近更新 更多