使用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
非常感谢您的回答! – user2211803 2013-03-26 14:42:36
+1不错的例子。对初学者可能有一点参与。 – MattH 2013-03-26 14:43:29
该示例只有';'但是OP表示分隔符可能是';'要么 ','。我认为你的例子在用作分隔符的第一个','中断了。 – Anthon 2013-03-26 14:44:47