У меня очень большой CSV-файл (миллион + строк), над которым я хотел бы выполнить некоторые операции.Проблема в том, что некоторые строки имеют некоторые нежелательные разрывы строк, например:
New York City; Iron Man; no superpowers;
Metropolis; Superman; superpowers;
New York City;
Spider-Man;
superpowers;
Gotham; Batman; no superpowers;
New York City; Doctor Strange; superpowers;
Файл, таким образом, имеет три столбца (location
, superhero
, superpowers
).Поскольку запись для Человека-паука является ошибочной, так как между ее записями есть разрывы строк, pandas ошибочно предполагает, что это три отдельные строки, то есть NaNs
во втором и третьем столбце.
Моя идея состояла в том, чтобы исправить это во время импорта с помощью регулярных выражений.Согласно этому веб-сайту , это регулярное выражение правильно соответствует желаемым строкам и не соответствует ошибочным (т.е. Человеку-пауку).
(.*[;].*[;].*)
Егообратный ((?!(.*[;].*[;].*))
, однако, не работает, потому что он не только не соответствует трем ошибочным строкам, но и третьей записи каждой нормальной строки.
Другой мой подход состоял в том, чтобы просто установитьколичество столбцов, а затем удалите все разрывы строк из всего файла. Однако это тоже не сработало.
superhero_df = pd.read_csv("superheroes.csv", sep=' *; *', skiprows=12, names=["location", "superhero", "superpower"], index_col=False, engine="python")
superhero_df = superhero_df.replace('\r\n','', regex=True)
Требуемый результат должен выглядеть следующим образом:
New York City; Iron Man; no superpowers
Metropolis; Superman; superpowers;
New York City; Spider-Man; superpowers;
Gotham; Batman; no superpowers;
New York City; Doctor Strange; superpowers;