使用python进行数据处理

问题描述:

我是python的新手,所以请原谅我的问题。在我的工作中,我必须处理文本文件中表示的表格数据。值由昏迷或分号分隔。这种文件的简单例子看起来如下:使用python进行数据处理

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

我的目标是有一个脚本可以告诉我有多少奔驰在莫斯科(在本例中有两个),并保存新的文本文件莫斯科.txt以下内容

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

我会非常感谢您的帮助。

我建议您查看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 

更新#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 2013-03-26 14:42:36

+0

+1不错的例子。对初学者可能有一点参与。 – MattH 2013-03-26 14:43:29

+0

该示例只有';'但是OP表示分隔符可能是';'要么 ','。我认为你的例子在用作分隔符的第一个','中断了。 – Anthon 2013-03-26 14:44:47