#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я пытаюсь заменить number на «пустой, если строка / столбец содержит числа. Я попробовал следующее, он продолжает жаловаться, что isdigit не существует? Я попытался преобразовать столбец в строку, но это не помогает. Есть ли другие операторы, которые я мог бы использовать для фрейма данных pandas?
data = ['123567','1547892','2547879','ABC','3D']
df1 = pd.DataFrame(data)
df1.columns = ['col1']
df1.col1 = str(df1.col1)
if len(df1.col1) < 8 and df1.col1.isdigit(): # errors
df1.col1 == ''
print(df1)
Ищем вывод, подобный этому:
col1
0
1
2
3 ABC
4 3D
Ответ №1:
Чтобы получить доступ к строковым методам в серии, вам нужно сделать это через .str
атрибут Series
:
df1.col1.str.isdigit()
Смотрите Series.str.isdigit()
документацию.
Вы можете использовать это как логический индекс и напрямую присваивать выбранным строкам:
df1.col1[df1.col1.str.isdigit()] = ''
Смотрите раздел Работа с текстовыми данными.
Не используйте df1.col1.str.isdigit()
в if
инструкции, потому что логический массив сам по себе не является True или False, это массив логических значений, и поэтому при использовании в логическом контексте он выдал бы ошибку ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
.
ДЕМОНСТРАЦИЯ:
>>> import pandas as pd
>>> data = ['123567','1547892','2547879','ABC','3D']
>>> df1 = pd.DataFrame(data)
>>> df1.columns = ['col1']
>>> df1
col1
0 123567
1 1547892
2 2547879
3 ABC
4 3D
>>> df1.col1[df1.col1.str.isdigit()] = ''
>>> df1
col1
0
1
2
3 ABC
4 3D
Комментарии:
1. Я пробовал это раньше, но я получил ошибку ValueError: истинное значение ряда неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all().
2. @sharp: Я уже показал вам в своем ответе, как это сделать правильно.
3. Спасибо, теперь это работает. Не уверен, почему это вызывало эту ошибку раньше.