Найти и заменить Python - PullRequest
2 голосов
/ 03 марта 2020

Я работаю с pandas и довольно большим документом Excel. Моя цель - найти и заменить определенные символы в строке и заменить их ничем, по существу удаляя символы. Строки находятся в определенном столбце. Ниже вы увидите код, который я создал для поиска и замены, однако python не выдает мне сообщение об ошибке, и когда я проверял сохраненный файл, ничего не изменилось. Что я делаю не так?

import pandas as pd

df1 = pd.read_csv('2020.csv')

(df1.loc[(df1['SKU Code'].str.contains ('-DG'))])

dfDGremoved = (df1.loc[(df1['SKU Code'].str.contains('-DG'))].replace('-DG',''))

dfDGremoved.to_csv('2020DRAFT.csv')

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы можете использовать pandas .Series.str.replace () . Он выполняет замену регулярных выражений.

dfDGremoved = df1.copy()
dfDGremoved['SKU Code'] = dfDGremoved['SKU Code'].str.replace('-DG','')
dfDGremoved.to_csv('2020DRAFT.csv')
0 голосов
/ 03 марта 2020

Ваш код немного перегружен, метод Python replace игнорирует строки, которые не содержат подстроку, которую вы хотите заменить, поэтому вызов contains не требуется. Создание второго фрейма данных также не требуется, pandas может иметь дело с заменами на месте.

Для достижения желаемого результата вы можете использовать карту , которая применяет функцию к каждому элемент в серии (который представляет собой один столбец из DataFrame), объединенный в лямбда-функцию :

df1 = pd.read_csv('2020.csv')
df1['SKU Code'] = df1['SKU Code'].map(lambda x: x.replace('-DG', '')
df1.to_csv('2020DRAFT.csv')

Распаковка это немного:

df1['SKU Code'] = df1['SKU Code'].map(lambda x: x.replace('-DG', '')
  |                     |          |         └─ Create a nameless function which 
  |                     |          |            takes a string and removes '-DG'
  |                     |          |            from it 
  |                     |          |
  |                     |          └─ ...and run this function on every element...
  |                     |
  |                     └─ ... of the 'SKU Code' column in df1...
  |
  └── ... Then store the results in that same column
...