Читайте CSV, використовуючи панди зі значеннями, укладеними подвійними лапками і значеннями мають кому в стовпці


4

Мені потрібно прочитати файл у пандонах python наступного типу

"column1","column2","column3","column4"
"value1","value,1","value2","value3"
"value5","value6","value7","value8"
"value32","value21","value,31","value,44"

Я спробував використовувати

file1 = pd.read_csv('sample.txt',sep=',\s+',skipinitialspace=True,quoting=csv.QUOTE_ALL,engine=python)

це говорить щось на зразок ValueErro (Очікується, що деякі рядки отримали щось інше) не зовсім так

Мені потрібно прочитати великий CSV-файл такого типу і завантажити його в рамку даних. які зміни я повинен зробити, щоб правильно її прочитати.


Я думаю, що потрібно використовувати sep=',\s*'замість цього sep=',\s+'. Що стосується кома всередині котируваного значення (як це стосується "value,31"), воно відповідає rfc4180 і не повинно бути проблемою
Алекс

Раніше він показував ValueError ("Очікується, що 1 поля в рядку 328, saw4 ',) **, а після зміни його на * він показує ** ValueError (" Очікується, що 1 поля в рядку 328, saw6',)
Ajay KS

Схоже, проблема з вихідними даними. Перевірте цей рядок 328 у файлі вихідних даних
Алекс

Вибачте, що про це не згадував, я перевірив це і виявив, що всередині подвійних лапок є додаткова кома. я видалив його вручну, і код працює нормально. Але я не можу це робити весь час, як я можу змінити код для вирішення ситуації. Є ще одна проблема, що всередині подвійних лапок на одне значення було інше, це також "" змушує програму вийти.
Ajay KS

кома всередині подвійних лапок - це ОК. Щодо " "- вам потрібно очистити вихідний файл перед обробкою. Якщо подвійні лапки залишаються разом, оскільки ""це також не повинно бути проблемою, оскільки воно відповідає стандарту CSV, воно викликає подвійні цитати, що уникнули. Якщо між подвійними лапками є пробіл, запустіть sed -r 's/\"\s+\"/\"\"/g' src.csv >cleared.csvперед тим, як годувати CSV пандами. Це видалить простір між цитатами або запустіть, sed -r 's/\"\s+\"//g' src.csv >cleared.csvщоб повністю видалити внутрішні цитати
Alex

Відповіді:


2

Не потрібно попередньо обробляти файл CSV, просто використовуйте движок типу python:

dataset = pd.read_csv('sample.csv', sep=',', engine='python')

Це не спрацювало для мене, я все ще бачу поодинокі цитати в моєму фреймі даних.
DataGirl

1
@DataGirl спробуйте додати skipinitials = Trueдо свого pd.read_csv(...). Як ви можете побачити тут: stackoverflow.com/a/37076344/3286178
rwenz3l

Як вказував @ rwenz3l, але синтаксисdataset = pd.read_csv('sample.csv', sep=',', skipinitialspace=True)
yoonghm

2

Використовуйте sep=',\s*'замість панд python sep=',\s+', це зробить простір необов’язковим після кожної коми:

file1 = pd.read_csv('sample.txt',sep=',\s*',skipinitialspace=True,quoting=csv.QUOTE_ALL,engine='python')

Кома всередині подвійних лапок - це нормально, це дозволено стандартом rfc4180.
Що стосується " "всередині значень даних (наприклад, "значення" "13") - вам потрібно буде очистити вихідний файл перед обробкою. Якщо подвійні лапки залишаються разом як "", це не повинно бути проблемою, оскільки воно відповідає стандарту CSV, воно викликає уникнуті подвійні лапки, але якщо між подвійними лапками є пробіл, тоді вам потрібно очистити його

Використання:

sed -r 's/\"\s+\"/\"\"/g' src.csv >cleared.csv 

перед тим, як годувати CSV пандами. Це видалить простір між цитатами або запустіть

sed -r 's/\"\s+\"//g' src.csv >cleared.csv 

повністю видалити внутрішні цитати.


Алекс, де ти запускаєш sed -r 's / \ "\ s + \" // g' src.csv> clearred.csv? Це фрагмент коду командного рядка?
DataGirl

@DataGirl Так, його слід запускати з командного рядка, в терміналі базової системи Unix або якщо ви в Windows, тоді вам потрібно встановити cygwin для використання програми "sed"
Алекс

sep = ', \ s *', здається, зламається за допомогою quotacharchar = '"', цитуючи = csv.QUOTE_ALL
Frobbit

відсутня одна цитатаpd.read_csv( ...... engine='python')
Dipankar Nalui

Виправлено. Tnx Dipankar
Алекс

0

Я "думаю", що ці дві команди з одинарними цитатами та подвійними лапками між назвою файлу повинні працювати однаково (чи ні?):

pd.read_csv ('filename.csv')

або це

pd.read_csv ("ім'я файлу.csv")

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.