您将如何优化此代码?

数据挖掘 Python 熊猫
2022-02-15 15:53:24

我使用该pandas库编写了以下代码。我想知道是否有办法优化代码。

for column in df:
 for index, row in df[column].iteritems():
    if type(row) == str:
        if 'R$' in row:
            n = row.replace('R$', '')
            n = n.replace(' ', '')
            n = n.replace('.', '')
            df[column].iloc[index] = float(n)

只想删除不需要的字符串部分。

1个回答

您可以替换数据框中的符号而无需自己进行迭代。

df = df.replace({'R\$': ''}, regex=True)

然后更改可以是数字的列的类型。如果您不知道哪些是那些列,使用它会自动将类型更改为数字并忽略那些无法更改的列。

df = df.apply(pd.to_numeric, errors='ignore')

当您使用replace以及通常许多其他 pandas 功能时,它不会更新您的数据框。它创建一个新的临时数据框。因此,您要么需要将其分配回原始数据框,要么inplace=True在任何可用的地方使用,例如:

df.replace({'R\$': ''}, regex=True, inplace = True)

$是正则表达式中的特殊字符,因此您需要对其进行转义。这就是为什么它之前的反斜杠。

import pandas as pd

dic = {'feature1': 'R$ aaa bb', 'feature2': 1} 
df = pd.DataFrame(dic, index=[0,1])

print(df)

>>  feature1  feature2
0  R$ aaa bb         1
1  R$ aaa bb         1

df = df.replace({'R\$': ''}, regex=True)

print(df)

>>  feature1  feature2
0   aaa bb         1
1   aaa bb         1