.replace() не работает при применении к нескольким столбцам в pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть несколько столбцов, которые содержат числовые данные с запятыми (например. число хранится как ‘4200’ и, следовательно, не читается как число) в базовом файле. Чтобы иметь возможность обрабатывать данные, мне нужно удалить эти запятые из нескольких столбцов данных.

 import pandas as pd
import numpy as np
df = {'INR': ['4,200','5,000',0,'4,353','6,000',1],
'USD':['4,100','3,000','1,000','4,353','6,000',1]}
df = pd.DataFrame(df)
  

Если я напишу следующую строку кода, это сработает:

 df['INR']=df['INR'].replace(',','').astype(int)
  

Но следующая строка кода не:

 df[['INR','USD']]=df[['INR','USD']].replace(',','').astype(int)
  

Было бы здорово, если бы кто-нибудь мог помочь понять, почему

Комментарии:

1. Используйте df[['INR','USD']].replace(',', '', regex=True)

Ответ №1:

На самом деле, когда вы вызываете df[['INR','USD']] , его тип pd.DataFrame. У этого типа нет метода «.replace». только pd.Series с этим вызовом :

 df['INR'].astype(str).str.replace(",", "").astype(int)
  

Не забывайте о .str.

В вашем случае используйте метод applymap, подобный этому :

 df[['INR','USD']] = df[['INR','USD']].applymap(lambda x: int(str(x).replace(",","")))
  

Вы можете получить информацию о applymap здесь :
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.applymap.html

Метод сокращения путем вывода типов (я предпочитаю не использовать метод сокращения, чтобы понять, что делает …) :

 df[['INR','USD']] = df[['INR','USD']].replace(',', '', regex=True)