Как удалить первые 8 символов из определенных столбцов pandas dfs, не зная имен столбцов? - PullRequest
0 голосов
/ 12 октября 2019

У меня есть панда DataFrame, которая создается следующим образом:

df = pandas.DataFrame({"imdbPage": emptyWebPageSet,
                       "title": emptySetTitle,
                       "genre1": lst1,
                       "genre2": lst2,
                       "genre3": lst3,
                       "genre4": lst4,
                       "info":infoSet,
                       "Runtime(mins)":movieTime,
                       "releaseData":releaseDateSet,
                       "imdbRating":ratingSet,
                       "numberOfVotes":votesList,
                       "numberOfEpisodes":noOfEpisodesSet,
                       "TotalRunTime(mins)":totalRunTimeSet
                       })
df = pandas.get_dummies(data=df, columns=['genre1', 'genre2', 'genre3', 'genre4'])

Заголовки столбцов из вывода выглядят так:

output = ["imdbPage", "title", "info", "Runtime(mins)", "releaseData", "imdbRating", "numberOfVotes",
"numberOfEpisodes", """genre1_Action", "genre1_Adventure", "genre1_Animation",
"genre1_Biography", "genre1_Comedy".... etc]

Что я хочу сделатьэто удалить все "genre1_", "genre2_" части из вывода, но я, очевидно, не знаю точно имя столбца или сколько их - только то, что они начинаются с "genre1_", "genre2_", "genre3_" или "genre4_".

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Использование str.replace :

import pandas as pd

output = ["imdbPage", "title", "info", "Runtime(mins)", "releaseData", "imdbRating", "numberOfVotes",
          "numberOfEpisodes", "genre1_Action", "genre1_Adventure", "genre1_Animation", "genre1_Biography",
          "genre1_Comedy"]

print(pd.Series(data=output).str.replace('^genre\d+_', ''))

Выход

0             imdbPage
1                title
2                 info
3        Runtime(mins)
4          releaseData
5           imdbRating
6        numberOfVotes
7     numberOfEpisodes
8               Action
9            Adventure
10           Animation
11           Biography
12              Comedy
dtype: object
0 голосов
/ 12 октября 2019

Вы можете попробовать следующее (ссылка Здесь ):

newcols = {}
for col in df.columns:
    newcol = re.match("(^genre\d{1,}_)(.*$)", col).group(2)
    newcols[col] = newcol
df.rename(columns=newcols, inplace=True)
print(df)

или, более кратко:

df.rename(columns=lambda x: re.match("(^genre\d{1,}-)(.*$)", x).group(2), inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...