Получить первую букву строки из столбца
Я сражаюсь с pandas, и пока я теряю. У меня есть исходная таблица, подобная этой:
import pandas as pd
a=pd.Series([123,22,32,453,45,453,56])
b=pd.Series([234,4353,355,453,345,453,56])
df=pd.concat([a, b], axis=1)
df.columns=['First', 'Second']
Я хотел бы добавить новый столбец в этот фрейм данных с первой цифрой из значений в столбце "Первый":
а) изменить номер на строку из столбца "Первый"
б) извлечение первого символа из вновь созданной строки
c) Результаты из b сохраняются как новый столбец в фрейме данных
Я не знаю, как применить это к объекту фрейма pandas. Я был бы признателен за то, что помог мне в этом.
Ответы
Ответ 1
Переместите dtype
в col на str
, и вы можете выполнить нарезку с надписью str
:
In [29]:
df['new_col'] = df['First'].astype(str).str[0]
df
Out[29]:
First Second new_col
0 123 234 1
1 22 4353 2
2 32 355 3
3 453 453 4
4 45 345 4
5 453 453 4
6 56 56 5
если вам нужно, вы можете снова направить dtype
, вызвав astype(int)
в столбце
Ответ 2
.str.get
Это самый простой способ указать строковые методы
# Setup
df = pd.DataFrame({'A': ['xyz', 'abc', 'foobar'], 'B': [123, 456, 789]})
df
A B
0 xyz 123
1 abc 456
2 foobar 789
df.dtypes
A object
B int64
dtype: object
Для столбцов строкового (читай: object
) типа используйте
df['C'] = df['A'].str[0]
# Similar to,
df['C'] = df['A'].str.get(0)
Для нечисловых столбцов необходимо предварительно преобразовать .astype
, как показано в ответе @Ed Chum.
df['D'] = df['B'].astype(str).str[0]
df
A B C D
0 xyz 123 x 1
1 abc 456 a 4
2 foobar 789 f 7
Понимание списка и индексация
Простое понимание списка будет работать хорошо и, вероятно, будет быстрее.
# For string columns
df['C'] = [x[0] for x in df['A']]
# For numeric columns
df['D'] = [str(x)[0] for x in df['B']]
df
A B C D
0 xyz 123 x 1
1 abc 456 a 4
2 foobar 789 f 7