Удалить последний символ определенных строк, заканчивающийся на «.» - PullRequest
0 голосов
/ 18 июня 2019

У меня есть несколько CSV-файлов с одним и тем же типом данных, которые должны быть объединены в строках для формирования одного фрейма данных, но некоторые имена строк содержат грязные данные.

Например, '.'в конце фактического имени.Я попробовал следующий код -

for file in all_files:
temp = pd.read_csv(file, encoding = "unicode_escape")
temp = temp[['S.No.', 'Item', '2014-15']]
state = lambda x: x.split('-')
temp.rename(columns = {'2014-15':state(file)[1]}, inplace= True)
if file == all_files[0]:
    all_states = temp.copy(deep=True)
else:
    temp["Item"] = temp["Item"].str.replace("*", "")
    all_states = pd.merge(all_states, temp, how = 'outer', on = ['S.No.', 'Item'])
del temp

Вывод, который я получаю, -

S.No.1 1,1 1,2 1,3.,.

1.1.-> Нужно избавиться от них и считать их 1.1

Загрязненным S.No.формирует новую строку для одного столбца.Мне нужно, чтобы он был в тех же строках, что и другие.

Я просто хочу последний '.'в конце строки, которую нужно удалить, и не все.

Я попробовал следующее для очистки S.No.:

temp["S.No."] = temp["S.No."].str.rstrip(".")
temp["S.No."] = temp["S.No."].str.replace(".$", "")
temp["S.No."] = re.sub(r".$", "", str(temp["S.No."]))

Но ни один из них не работает.

Заголовки: enter image description here

Грязные ряды: enter image description here

Ответы [ 3 ]

1 голос
/ 18 июня 2019

Предполагается, что вы удаляете только один ., если он существует в конце строки:

def clean_s_no(text):
    return re.sub('\.$', '', text)

Обратите внимание на \ (escape-символ) и $ (конец строки).

Затем примените функцию ко всем строкам в этом столбце:

temp["S.No."] = temp["S.No."].apply(lambda x: clean_s_no(x), axis=1)

или

temp["S.No."] = temp["S.No."].apply(clean_s_no, axis=1)
0 голосов
/ 20 июня 2019

проблема была в том, что '.' в конце было еще 4 пробела, которые остались незамеченными.

Итак, после удаления этих пробелов с помощью -

temp["S.No."] = temp["S.No."].str.strip()

Все перечисленные методы работают. Я использовал -

temp["S.No."] = temp["S.No."].str.rstrip(".")
0 голосов
/ 18 июня 2019

Предполагая, что вы столбец "S.No."это тип строки, попробуйте следующее:

temp.loc[temp["S.No."].str.contains('.'), 'S.No.'] = temp["S.No."].str.replace(".","")

Вы можете изменить тип столбца на строку на

temp["S.No."] = temp["S.No."].astype(str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...