Как бороться с проблемой смещения данных CSV? - PullRequest
0 голосов
/ 02 октября 2018

У меня проблема с неправильным размещением данных.Данные сдвигаются вправо на две ячейки.

enter image description here

Мои вопросы:

  1. Как импортировать эти данные?Поскольку при использовании pd.read_csv всегда возникают следующие ошибки:

    ParserError: Error tokenizing data. C error: Expected 18 fields in line 6071, saw 19
    
  2. Как бороться с неправильным размещением данных?Я имею в виду, как заставить данные сместиться на две ячейки с помощью Python?

Спасибо за ваши предложения, и вот мой код:

# -*- coding: utf-8 -*-
import pandas as pd
import os
WorkingPath = u'E:\\Document'   

os.chdir(WorkingPath)

Shareholder= pd.read_csv(u'./1shareholder/Shareholders.csv', \
                     encoding='utf-16le', delimiter='\t')

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Ошибка возникает из-за того, что программа чтения CSV обнаруживает строки, ширина которых отличается от ширины строки заголовка (которую предполагается считать первой строкой).

Чтобы избежать этого, скажите, что данные имеютбез заголовка и вместо этого присваивать имена столбцам на основе пронумерованного диапазона:

df = pd.read_csv(file, header=None, names=range(20))

(замените 20 на максимальную ширину ваших данных.)

При необходимости вы можете позже поменять заголовки столбцовиспользуя df.columns=..., и если вам нужно удалить первую строку данных (поскольку она содержит заголовки, а не данные), используйте df = df.drop(0).

Чтобы сместить неуместные ячейки влево, вам необходимовыполните что-то вроде следующего:

import numpy as np
...
df.loc[~np.isnan(df[19]), [17, 18]] = df[[19, 20]]

Это заменит столбцы 17 и 18 на столбцы 19 и 20 в строках, где ячейка в столбце 19 не пуста.

0 голосов
/ 02 октября 2018

Если это .CSV, это означает, что весь файл структурирован как

    COLUMN1,COLUMN2,COLUMN3\n
    1,2,3\n
    A,B,C\n
    Dog,Cat,Bird\n

или длинная строка, которая "COLUMN1, COLUMN2, COLUMN3 \ n1,2,3 \ nA, B,C \ nDog, Cat, Bird \ n "Вы можете использовать цикл, чтобы пройти через него, ища запятую и новую строку в качестве разделителей.Если вы хотите сдвинуть пару ячеек влево, вам нужно проанализировать текст csv и манипулировать запятыми.Поэтому, если вам нужно переместить ячейку 2 влево, вы найдете количество имеющихся у вас столбцов, то, что хотите переместить влево, и удалите две запятые (в зависимости от того, как вы хотите, чтобы они соответствовали вашим столбцам) и добавили их.справа.

На самом деле в вашем изображении это может быть не неправильное расположение, а, скорее всего, то, что поля, в которых нет данных для этих столбцов, опущены.Так что, если у вас есть

COLUMN1,COLUMN2,COLUMN3\n
1,,3\n
A,B,C,D\n
Dog,Bird\n

Ячейка будет выглядеть как

Column1 | Column2 | Column3
1       |         | 3
A       | B       | C       | D
Dog     | Bird    

Так что макет будет испорчен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...