pandas.read_csv приводит к смещенным меткам столбцов при удалении строк ниже заголовка - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь прочитать файл .csv с пандами, с заголовком, похожим на это:

System Information_1
System Information_2
System Information_3
System Information_4

"Label1"; "Label2"; "Label3"; "Label4"; "Label5"; "Label6"
"alternative Label1"; "alternative Label2"; "alternative Label3"; "alternative Label4"; "alternative Label5"; "alternative Label6"
"unit1"; "unit2"; "unit3"; "unit4"; "unit5"; "unit6"

Я использую следующий код, чтобы прочитать его:df = pd.read_csv('data.csv', sep=';', header=5, skiprows=[6,7], encoding='latin1')

Однако мой фрейм данных в конечном итоге имеет "unit1", "unit2", "unit3", "unit4", "unit5", "unit6" вместо "Label1", "Label2", "Label3", "Label4", "Label5", "Label6" в качестве метки столбца.

Однако в более старой версии моего csv-файла код импорта работаетдолжным образом.Различие, которое я мог заметить между файлами, заключалось в том, что в старом файле есть полный набор разделителей в первых 4 строках:

System Information_1;;;;;
System Information_2;;;;; 
etc.  

Кто-нибудь знает, откуда возникла эта ошибка и как ее устранить?

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

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

import pandas as pd
from io import StringIO

data = """System Information_1
System Information_2
System Information_3
System Information_4

"Label1"; "Label2"; "Label3"; "Label4"; "Label5"; "Label6"
"alternative Label1"; "alternative Label2"; "alternative Label3" "alternative Label4"; "alternative Label5"; "alternative Label6"
"unit1"; "unit2"; "unit3"; "unit4"; "unit5"; "unit6" 
1;2;3;4;5;6
10;20;30;40;50;60
"""

df = pd.read_csv(StringIO(data), sep=';', header=[4], skiprows=[6, 7], encoding='latin1')

дает:

enter image description here

0 голосов
/ 20 ноября 2018

Параметр «header» начинает отсчет после параметра «skiprows».

Если вы хотите использовать метку в качестве заголовка:

df = pd.read_csv('pruebasof.csv', sep=';', skiprows=[0,1,2,3,4,6], encoding='latin1')

Иначе, если вы хотите использоватьальтернативная метка в качестве заголовка:

df = pd.read_csv('pruebasof.csv', sep=';', skiprows=6, encoding='latin1')

Я сделал это, чтобы вы могли использовать метку, сохраняя «единицы» в качестве данных для меток.

0 голосов
/ 20 ноября 2018

Вы также можете пропустить первые строки, но также не устанавливайте заголовок на 5, потому что тогда он равен 0, поэтому вы можете оставить его для автоматического обнаружения:

df = pd.read_csv('data.csv', sep=';', skiprows=[0,1,2,3,4,6,7], encoding='latin1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...