В строке 16553 входного csv-файла у вас есть неверные данные:
52lUXCmpmAIVsgNd1uADOy,Moosh & Twist,NULL
pandas
интерпретирует NULL
как nan
при чтении файла, который имеет типfloat
и не повторяется.Там также есть несколько других NULL
записей, так что вы можете либо вручную удалить их, либо исправить (желательно), либо обработать этот случай в своем коде.
Например, если вы действительно хотите сделать вид, чтоNULL
следует интерпретировать как пустой список, вы можете предварительно обработать данные следующим образом (сразу после чтения csv):
df.loc[df['genres'].isnull(),['genres']] = df.loc[df['genres'].isnull(),'genres'].apply(lambda x: [])
Или, что более элегантно, переключиться на чтение csv с помощью na_filter=False
:
df = pandas.read_csv('39K.csv', encoding='latin-1', na_filter=False)
, что в первую очередь не позволит пандам заменить эти значения на nan
.
Наконец, код не совсем делает то, что мы делаем, потому что он считает количествосимволы в строковом представлении списка.Решение состоит в том, чтобы предварительно обработать значения NULL в строки, представляющие пустые списки, а затем использовать ast.literal_eval
, чтобы превратить все строки обратно в списки:
import pandas
import ast
df = pandas.read_csv('39K.csv', encoding='latin-1', na_filter=False)
df.replace(to_replace="NULL", value="[]", inplace=True)
for item in df['genres']:
print(str(item))
print(ast.literal_eval(item))
df['lst_len'] = df['genres'].map(lambda x: len(ast.literal_eval(x)))