Я написал функцию cleanup () , чтобы привести в порядок беспорядочные данные в некоторых столбцах моего df:
def cleanup(df,column):
regex = df[column].str.findall(r"('name': '[\w\s]+')")
for i in range(len(df[column])):
df[column][i] = [regex[i][x].split(":")[1].strip().strip("''") for x in range(len(regex[i]))]
return df
Чем удобнее читать Dataframe:
{'adult': {0: 'False', 1: 'False', 2: 'False', 3: 'False', 4: 'False'},
'budget': {0: '30000000', 1: '65000000', 2: '0', 3: '16000000', 4: '0'},
'genres': {0: "[{'id': 16, 'name': 'Animation'}, {'id': 35, 'name': 'Comedy'}, {'id': 10751, 'name': 'Family'}]",
1: "[{'id': 12, 'name': 'Adventure'}, {'id': 14, 'name': 'Fantasy'}, {'id': 10751, 'name': 'Family'}]",
2: "[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]",
3: "[{'id': 35, 'name': 'Comedy'}, {'id': 18, 'name': 'Drama'}, {'id': 10749, 'name': 'Romance'}]",
4: "[{'id': 35, 'name': 'Comedy'}]"},
'id': {0: '862', 1: '8844', 2: '15602', 3: '31357', 4: '11862'},
'original_language': {0: 'en', 1: 'en', 2: 'en', 3: 'en', 4: 'en'},
'popularity': {0: 21.946943,
1: 17.015539,
2: 11.7129,
3: 3.859495,
4: 8.387519000000001},
'production_companies': {0: "[{'name': 'Pixar Animation Studios', 'id': 3}]",
1: "[{'name': 'TriStar Pictures', 'id': 559}, {'name': 'Teitler Film', 'id': 2550}, {'name': 'Interscope Communications', 'id': 10201}]",
2: "[{'name': 'Warner Bros.', 'id': 6194}, {'name': 'Lancaster Gate', 'id': 19464}]",
3: "[{'name': 'Twentieth Century Fox Film Corporation', 'id': 306}]",
4: "[{'name': 'Sandollar Productions', 'id': 5842}, {'name': 'Touchstone Pictures', 'id': 9195}]"},
'production_countries': {0: "[{'iso_3166_1': 'US', 'name': 'United States of America'}]",
1: "[{'iso_3166_1': 'US', 'name': 'United States of America'}]",
2: "[{'iso_3166_1': 'US', 'name': 'United States of America'}]",
3: "[{'iso_3166_1': 'US', 'name': 'United States of America'}]",
4: "[{'iso_3166_1': 'US', 'name': 'United States of America'}]"},
'release_date': {0: '1995-10-30',
1: '1995-12-15',
2: '1995-12-22',
3: '1995-12-22',
4: '1995-02-10'},
'revenue': {0: 373554033.0,
1: 262797249.0,
2: 0.0,
3: 81452156.0,
4: 76578911.0},
'runtime': {0: 81.0, 1: 104.0, 2: 101.0, 3: 127.0, 4: 106.0},
'status': {0: 'Released',
1: 'Released',
2: 'Released',
3: 'Released',
4: 'Released'},
'title': {0: 'Toy Story',
1: 'Jumanji',
2: 'Grumpier Old Men',
3: 'Waiting to Exhale',
4: 'Father of the Bride Part II'},
'vote_average': {0: 7.7, 1: 6.9, 2: 6.5, 3: 6.1, 4: 5.7},
'vote_count': {0: 5415.0, 1: 2413.0, 2: 92.0, 3: 34.0, 4: 173.0}}
Когда я вызываю функцию с apply (), она говорит:
KeyError: ('production_countries', 'occurred at index adult')
Может кто-нибудь сказать мне, почему она дает мне эту ошибку? Потому что, когда я вызываю функцию без применения, например:
cleanup(df,"production_countries")
Это дает мне еще одну ошибку, говоря:
object of type 'float' has no len()
Но сейчас я просто хочу знать, почему применение не работает, спасибо