В Python Pandas, как искать, если элементы столбца содержат первые 2 цифры - PullRequest
0 голосов
/ 26 сентября 2018

Я довольно новичок в Python, и в настоящее время я пытаюсь создать функцию, которая ищет первые 2 цифры элементов в столбце и, если true, возвращает результат с новым заголовком, таким как region

Например,

   Adres  AreaCode Region
0  SArea    123191      A
1  BArea    122929      A
2  AArea    132222      B

Я хочу, чтобы функция осуществляла поиск только первых 2 цифр AreaCode, который дал бы мне результат, вместе с новым заголовком Region, который классифицирует Region на основе первого2 цифры AreaCode.Так что в этом случае 12 даст мне A, а 13 даст мне B

Я уже пробовал это

df.loc[df.AreaCode == 123191, 'Region'] = 'A'

, и это работало для всего AreaCode, но я понятия не имею, как его изменитьтак что я мог бы искать на основе первых 2 цифр.

, и я попробовал это

df.loc[df.AreaCode.str.contains == 12, 'Region' ] = 'A' 

, но это дает мне ошибку:

AttributeError: Can only use .str accessor with string values,
                which use np.object_ dtype in pandas

Как мне это исправить, и большое спасибо за помощь!

Ответы [ 5 ]

0 голосов
/ 26 сентября 2018

Сначала преобразуйте тип данных в str, как это

df.AreaCode = df.AreaCode.astype('str')

Затем проверьте число в начале, как это

df.loc[df.AreaCode.startswith('12'), 'Region' ] = 'A' 

Предполагая, что вам нужен nan в строках, которые неначать с A, вы можете сделать карту, как это

df['Region'] = df['AreaCode'].map(lambda x : 'A' if x.startswith('12') else np.nan )
0 голосов
/ 26 сентября 2018

Посмотрите, поможет ли это -

Сначала преобразуйте столбец кода города dtype в строку с

df.AreaCode = df.AreaCode.astype(str)

А затем выполните фильтрацию по первым символам столбца

df.loc[(df.AreaCode.str.startswith('12')) & (df.Region=='A')]

0 голосов
/ 26 сентября 2018

Я пробовал это df.loc [df.AreaCode.str.contains == 12, 'Region'] = 'A', но выдает ошибку: AttributeError: Может использовать только аксессор .str со строковыми значениями, которые используют np.object_ dtype в pandas

Вы можете просто преобразовать его в строку, а затем использовать тот же код:

df.loc[df.AreaCode.astype(str).str.startswith('12'), 'Region' ] = 'A'
0 голосов
/ 26 сентября 2018

Попробуйте это

df.loc[df.AreaCode.astype(str).str.startswith("12") == True, 'Region' ]

Строка ниже даст вам серию с True / False для каждой строки и того, что станет фильтром для информационного кадра.

df.AreaCode.astype(str).str.startswith("12")

Назначение теста равных делает его фильтром.

0 голосов
/ 26 сентября 2018

Это будет работать, я думаю.

df.loc [df.AreaCode.str.startswith ('12 '),' Region '] =' A '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...