Удаление значений столбцов с помощью большой строки слов в Python - PullRequest
0 голосов
/ 04 января 2019

У меня есть фрейм данных, который имеет много столбцов, но имеет столбец состояний, к которому прикреплены дополнительные строки. Столбец выглядит так:

State
U.S. Natural Gas Number of Residential Consumers (Count)
Alabama Natural Gas Number of Residential Consumers (Count)
Kentucky Natural Gas Number of Residential Consumers (Count)
Mississippi Natural Gas Number of Residential Consumers (Count)
Tennessee Natural Gas Number of Residential Consumers (Count)
Arizona Natural Gas Number of Residential Consumers (Count)
Colorado Natural Gas Number of Residential Consumers (Count)
Idaho Natural Gas Number of Residential Consumers (Count)
Montana Natural Gas Number of Residential Consumers (Count)
Nevada Natural Gas Number of Residential Consumers (Count)
New Mexico Natural Gas Number of Residential Consumers (Count)
.
.
.

Я бы хотел избавиться от Natural Gas Number of Residential Consumers (Count) от каждого значения, чтобы я оставался только с государством. Я пробовал:

df['State'] = df['State'].map(lambda x:x.strip('Natural Gas Number of Residential Consumers (Count)'))

Но, похоже, это не работает. Это дает мне в качестве вывода:

State
U.S.
A
Kentucky
Mississipp
T
Ariz
""
Idah
M
v
w Mexic
.
.
.

Когда я хочу удалить отдельные символы, такие как R, это работает - протестировал его, используя x.rstrip и x.lstrip.

Является ли отображение с использованием лямбда-функции правильным способом для удаления этих длинных строк из всех моих значений? Я не уверен, что лучший способ сделать это.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вот еще один более простой способ. Вместо использования карты используйте Apply:

df['State']=df['State'].apply(lambda x:x.split(sep='Natural')[0])

Причина, по которой я даю «Natural» (означает пробел перед Natural), чтобы он не добавлял пробелы в конечном результате. Это дало мне следующий вывод:

        State
0   U.S.
1   Alabama
2   Kentucky
3   Mississippi
4   Tennessee
5   Arizona
6   Colorado
7   Idaho
8   Montana
9   Nevada
10  New Mexico
0 голосов
/ 04 января 2019

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

df['clean'] = df['State'].str.replace('Natural Gas Number of Residential Consumers (Count)', '', regex=False).str.strip()
print(df.clean)

выход

0            U.S.
1         Alabama
2        Kentucky
3     Mississippi
4       Tennessee
5         Arizona
6        Colorado
7           Idaho
8         Montana
9          Nevada
10     New Mexico
Name: clean, dtype: object
...