Так что я знаю, что могу добавить новый столбец в Пандах вот так:
df
=====
A
1 5
2 6
3 7
df['new_col'] = "text"
df
====
A new_col
1 5 text
2 6 text
3 7 text
И я также могу установить новый столбец на основе операции над существующим столбцом.
def times_two(x):
return x * 2
df['newer_col'] = time_two(df.a)
df
====
A new_col newer_col
1 5 text 10
2 6 text 12
3 7 text 14
однако, когда я пытаюсь работать с текстовым столбцом, я получаю неожиданный AttributeError.
df['new_text'] = df['new_col'].upper()
AttributeError: 'Series' object has no attribute 'upper'
Теперь он рассматривает значение как серию, а не значение в этой "ячейке".
Почему это происходит с текстом, а не с числами, и как можно обновить мой DF новым столбцом на основе существующего текстового столбца?
Это потому, что оператор *
реализован как оператор mul
а upper
не определен для Series
. Вы должны использовать str.upper
который реализован для Series
:
In[53]:
df['new_text'] = df['new_col'].str.upper()
df
Out[53]:
A new_col new_text
1 5 text TEXT
2 6 text TEXT
3 7 text TEXT