Pandas:在 Matt Harrison 的书《Effective Pandas》中使用 .replace()

问题描述 投票:0回答:1

我正在阅读这本书,有一段代码我既无法运行也无法调试。如果有人感兴趣的话,在第180页。

所以我试图将一列具有多个类别的类型对象替换为一个值。这就是表格的样子:

*Company_size*
Just me
More than 5,000
More than 5,000
Not sure
2-10
11-50
51-500
...

值“只有我”应替换为 1,“超过 5,000”应替换为 5000,“不确定”应替换为 NaN,“2-10”应替换为 2,“11-50”应替换为 11,依此类推。

替换它的代码是:

jb2 = jb[uniq_cols].rename(columns=lambda c: c.replace('.','_')).assign(company_size=lambda df_: df_.company_size.replace({'Just me': 1, 'Not sure':np.nan, 'More than 5,000':5000, '2-10':2, '11-50':11, '51-500':51, '501-1,000':501, '1,001-5,000':1001}))

此代码涉及之前的一个步骤:

  1. 仅使用名为 uniq_cols 的列表的相关列和
  2. 将列标题中的点转换为下划线

代码正确转换了前三个值,即“Just me”、“Not certain”和“More and 5,000”。其余保持不变。

我尝试在基础层面上使用 .replace() 来看看它是如何工作的。代码:

>>> df = pd.DataFrame.from_dict({'total revenue':['0-10', '11-100', '101-500', '501-1000']})
>>> df
  total revenue
0          0-10
1        11-100
2       101-500
3      501-1000
>>> df['total revenue'] = df['total revenue'].replace({'0-10':0,'11-100':11,'101-500':101,'501-1000':501})
>>> df['total revenue']
0      0
1     11
2    101
3    501
Name: total revenue, dtype: int64
>>> 

这非常有效。在使用 .replace() 之前,我尝试将原始列从对象类型转换为字符串。还尝试在原始代码中添加“inplace=True”,但它们也不起作用。我不知道代码本身不起作用,还是我对 .replace() 函数的理解存在问题。

数据集的链接

python pandas visual-studio-code replace jupyter-notebook
1个回答
0
投票

上述错误似乎是由于使用 所提供数据中的 Unicode 字符 HYPHEN-MINUS (U002D) '–' 与键盘输入的连字符不匹配。

此外,还需要设置以下选项:

pd.set_option('future.no_silent_downcasting', True)

完成后,代码应该可以顺利运行。

© www.soinside.com 2019 - 2024. All rights reserved.