2013-03-26 2 views
3

Я новичок в python, поэтому, пожалуйста, извините меня за мой вопрос. В моей работе я должен работать с табличными данными, представленными в текстовых файлах. Значения разделяются либо комой, либо точкой с запятой. Упрощенный пример такого файла может выглядеть следующим образом:обработка данных с помощью python

City;Car model;Color;Registration number 
Moscow;Mercedes;Red;1234 
Moscow;Mercedes;Red;2345 
Kiev;Toyota;Blue;3423 
London;Fiat;Red;4545 

Моя цель состоит в том, чтобы иметь сценарий, который может сказать мне, сколько Mercedes в Москве (в нашем случае есть два) и сохранить новый текстовый файл в Москве .txt со следующими

Moscow;Mercedes;Red;1234 
Moscow;Mercedes;Red;2345 

Я буду очень благодарен вам за помощь.

ответ

6

Я бы рекомендовал изучить библиотеку pandas. Вы можете делать всевозможные аккуратные манипуляции с табличными данными. Сначала прочитал в:

>>> import pandas as pd 
>>> df = pd.read_csv("cars.ssv", sep=";") 
>>> df 
    City Car model Color Registration number 
0 Moscow Mercedes Red     1234 
1 Moscow Mercedes Red     2345 
2 Kiev Toyota Blue     3423 
3 London  Fiat Red     4545 

Индекс его по-разному:

>>> moscmerc = df[(df["City"] == "Moscow") & (df["Car model"] == "Mercedes")] 
>>> moscmerc 
    City Car model Color Registration number 
0 Moscow Mercedes Red     1234 
1 Moscow Mercedes Red     2345 
>>> len(moscmerc) 
2 

Написать это:

>>> moscmerc.to_csv("moscmerc.ssv", sep=";", header=None, index=None) 
>>> !cat moscmerc.ssv 
Moscow;Mercedes;Red;1234 
Moscow;Mercedes;Red;2345 

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

>>> df.groupby(["City", "Car model"]).size() 
City Car model 
Kiev Toyota  1 
London Fiat   1 
Moscow Mercedes  2 
Dtype: int64 

Обновление: @Anthon указал, что выше всего обрабатывается случай разделителя с запятой. Если файл имеет запятую повсюду, вы можете просто использовать , вместо ;, так что это тривиально. Более интересным является случай, если разделитель не соответствует в файле, но это легко обрабатывается слишком:

>>> !cat cars_with_both.txt 
City;Car model,Color;Registration number 
Moscow,Mercedes;Red;1234 
Moscow;Mercedes;Red;2345 
Kiev,Toyota;Blue,3423 
London;Fiat,Red;4545 
>>> df = pd.read_csv("cars_with_both.txt", sep="[;,]") 
>>> df 
    City Car model Color Registration number 
0 Moscow Mercedes Red     1234 
1 Moscow Mercedes Red     2345 
2 Kiev Toyota Blue     3423 
3 London  Fiat Red     4545 

Update # 2: а теперь текст на русском языке - конечно, это. : ^) Тем не менее, если все правильно закодировано, и ваш терминал настроен правильно, это тоже должно работать:

>>> df = pd.read_csv("russian_cars.csv", sep="[;,]") 
>>> df 
    City Car model Color Registration number 
0 Москва Mercedes красный     1234 
1 Москва Mercedes красный     2345 
2 Киев Toyota синий     3423 
3 Лондон  Fiat красный     4545 
+0

Большое вам спасибо за ваш ответ! – user2211803

+0

+1 Хорошие примеры. Может быть немного задействован для новичка. – MattH

+0

Пример имел только ';' но ОП заявил, что разделитель может быть либо «;» или ','. Я думаю, что ваш пример разбивается на первый «,», который используется как разделитель. – Anthon

Смежные вопросы