Условно заменяя строки в столбце Pandas - PullRequest
0 голосов
/ 10 декабря 2018

В моем Pandas DataFrame, одном из столбцов «naics», содержатся коды NAICS, такие как 311, 311919, 3159, 331, 332, 332913.

Я хотел бы заменить все коды, которыеначинайте с тех же двух цифр только с этих двух цифр.Например, если значение равно 311, 311919, 3159 или любой другой строке (это должны остаться строки, а не int), которая начинается с 31, я бы хотел, чтобы новое значение было 31.

Iпробовал варианты:

df.naics.loc[(df['naics'] == '^31')] = '31'

Но все варианты, которые я пробовал, не влияют (и ни у одного нет ошибок).

Есть предложения?

Спасибо,

Джарод

Ответы [ 4 ]

0 голосов
/ 11 декабря 2018

Вы можете попробовать это:)

import pandas as pd
df = pd.DataFrame({'naics':['311', '311919', '3159', '331', '332', '332913']})
df['code'] = df2.naics.apply(lambda s : s[:2])
df
0 голосов
/ 10 декабря 2018

Небольшое изменение в вашем коде, вам не понадобится astype (str), если столбец имеет тип объекта

df.loc[df['naics'].astype(str).str[:2] == '31', 'naics'] = '31'


naics
0   31
1   31
2   31
3   331
4   332
5   332913
0 голосов
/ 10 декабря 2018

Использование startswith

df.loc[df.naics.str.startswith('31'),'naics']='31'
df
Out[1272]: 
    naics
0      31
1      31
2      31
3     331
4     332
5  332913
0 голосов
/ 10 декабря 2018

Вы можете использовать str accessor:

setup:

df = pd.DataFrame({'naics':['311', '311919', '3159', '331', '332', '332913']})
>>> df
    naics
0     311
1  311919
2    3159
3     331
4     332
5  332913

Решение с использованием str:

df['code'] = df.naics.str[:2]

>>> df
    naics code
0     311   31
1  311919   31
2    3159   31
3     331   33
4     332   33
5  332913   33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...