相关疑难解决方法(0)

在pandas中,我可以深度复制DataFrame,包括其索引和列吗?

首先,我创建一个DataFrame

In [61]: import pandas as pd
In [62]: df = pd.DataFrame([[1], [2], [3]])
Run Code Online (Sandbox Code Playgroud)

然后,我深深地复制了它 copy

In [63]: df2 = df.copy(deep=True)
Run Code Online (Sandbox Code Playgroud)

现在DataFrame不同了.

In [64]: id(df), id(df2)
Out[64]: (4385185040, 4385183312)
Run Code Online (Sandbox Code Playgroud)

但是,index仍然是一样的.

In [65]: id(df.index), id(df2.index)
Out[65]: (4385175264, 4385175264)
Run Code Online (Sandbox Code Playgroud)

在列中发生同样的事情,有没有什么方法可以轻松地将其复制到值,还有索引和列?

python pandas

25
推荐指数
2
解决办法
2万
查看次数

返回以pandas数据框为参数的函数的输出

我有一个熊猫数据框,看起来像:

d = {'some_col' : ['A', 'B', 'C', 'D', 'E'],
     'alert_status' : [1, 2, 0, 0, 5]}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

我的工作中有很多任务需要在熊猫中执行相同的任务。我开始写标准化的函数,这些函数将数据框作为参数并返回一些信息。这是一个简单的例子:

def alert_read_text(df, alert_status=None):
    if (alert_status is None):
        print 'Warning: A column name with the alerts must be specified'
    alert_read_criteria = df[alert_status] >= 1
    df[alert_status].loc[alert_read_criteria] = 1
    alert_status_dict = {0 : 'Not Read',
                         1 : 'Read'}
    df[alert_status] = df[alert_status].map(alert_status_dict)
    return df[alert_status]
Run Code Online (Sandbox Code Playgroud)

我希望该函数返回一个序列。这样,可以在现有数据框中添加一列:

df['alert_status_text'] = alert_read_text(df, alert_status='alert_status')
Run Code Online (Sandbox Code Playgroud)

但是,当前,此函数将正确返回一个序列,但也会修改现有列。如何使传入的原始列不被修改?

python pandas

5
推荐指数
1
解决办法
7624
查看次数

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

我坚持很明显的任务.

我有一个缺少数据的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']
Run Code Online (Sandbox Code Playgroud)

然后我正在尝试创建两个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])
Run Code Online (Sandbox Code Playgroud)

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

python pandas

1
推荐指数
1
解决办法
446
查看次数

为什么插入到复制数据帧的新列也会添加到原始数据帧中?

您能否告诉我为什么新列c被添加到原始数据框中,即df_old

df_old = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
df_new=df_old
df_new['c']=[5,6]
print('Old:')
print(df_old)
print('New:')
print(df_new)
Run Code Online (Sandbox Code Playgroud)

输出:

Old:
   a  b  c
0  1  3  5
1  2  4  6
New:
   a  b  c
0  1  3  5
1  2  4  6
Run Code Online (Sandbox Code Playgroud)

实际上,我需要保留原始数据帧:

   a  b  
0  1  3  
1  2  4  
Run Code Online (Sandbox Code Playgroud)

提前致谢,

dataframe python-3.x pandas

1
推荐指数
1
解决办法
42
查看次数

标签 统计

pandas ×4

python ×3

dataframe ×1

python-3.x ×1