从现有数据框创建新的DataFrame而不会丢失值

时间:2017-09-29 12:01:51

标签: python pandas

我坚持了很明显的任务。

我有丢失数据的df。为了处理这种数据,我想测试两个dataFrame。

对于第一个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']

然后我正在尝试创建两个dataFrame。

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数据框已被修改。无论如何,我认为我的方法不准确,解决此类任务的正确方法是什么?

2 个答案:

答案 0 :(得分:6)

使用

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])

答案 1 :(得分:1)

我认为你需要做的就是:

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])