Как прочитать файл .csv в Python / Pandas, в котором запятая (,) является разделителем и также присутствует в имени столбца? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть файл .csv, как показано ниже, в котором запятая присутствует и в некоторых именах столбцов.

#NAME,DATE,RECORDS,QUANTITY
Johb.W. Smith, LLC,03/01/2018 to 03/29/2018,728,32309.77
XXX Industrial Ltd, Inc.,07/27/2017 to 07/28/2017,2,312.00
XYSC,03/02/2018 to 03/29/2018,387,4468.50

Когда я пытаюсь прочитать это в Python / Panda, столбец, в котором естьэто запятая, доступно смещение (так как система рассматривает это как новое значение строки, которое на самом деле не является).

#NAME                         DATE                       RECORDS
Johb.W. Smith                 LLC                        03/01/2018         728.0   
XXX Industrial Ltd            Inc.                       07/27/2017      2.0    
XYSC                          03/02/2018                 387    

For.Ex- В строке № 1, Johb.W.Smith LLC - это полное имя (которое на самом деле отделялось запятой в оригинальном файле csv, следовательно, в панде это новое значение ячейки)

Кто-нибудь может подсказать, как от этого избавиться?Фактический результат должен выглядеть следующим образом:

#NAME                      DATE                      RECORDS                 
Johb.W. Smith LLC          03/01/2018 to 03/29/2018  728    
XXX Industrial Ltd Inc.    07/27/2017 to 07/28/2017  2  
XYSC                       03/02/2018 to 03/29/2018  387    

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Введите данные или отредактируйте файл, чтобы исправить его, вручную.

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

Если кто-топообещал вам CSV-файл, отклоните этот и попросите их предоставить правильно отформатированный CSV-файл.

0 голосов
/ 09 июня 2018

Существует проблема в csv, потому что, если разделитель равен , и некоторые значения содержат ,, очевидно, добавляются кавычки к значениям для действительного csv:

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

Создайте один столбец DataFrame по разделителю, который отсутствует в данных, например |, и разделите на rsplit (split) с параметром n на number of columns - 1, здесь 3:

import pandas as pd

temp=u"""#NAME,DATE,RECORDS,QUANTITY
Johb.W. Smith, LLC,03/01/2018 to 03/29/2018,728,32309.77
XXX Industrial Ltd, Inc.,07/27/2017 to 07/28/2017,2,312.00
XYSC,03/02/2018 to 03/29/2018,387,4468.50"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="|")

df1 = df.iloc[:, 0].str.rsplit(',', n=3, expand=True)
df1.columns = df.columns.str.split(',')[0]
print (df1)
                      #NAME                      DATE RECORDS  QUANTITY
0        Johb.W. Smith, LLC  03/01/2018 to 03/29/2018     728  32309.77
1  XXX Industrial Ltd, Inc.  07/27/2017 to 07/28/2017       2    312.00
2                      XYSC  03/02/2018 to 03/29/2018     387   4468.50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...