使用python进行数据处理

use*_*803 3 python python-2.7

我是python的新手所以请原谅我的问题.在我的工作中,我必须使用文本文件中表示的表格数据.值由彗差或半结肠分隔.此类文件的简化示例可能如下所示:

City;Car model;Color;Registration number
Moscow;Mercedes;Red;1234
Moscow;Mercedes;Red;2345
Kiev;Toyota;Blue;3423
London;Fiat;Red;4545
Run Code Online (Sandbox Code Playgroud)

我的目标是有一个脚本可以告诉我有多少梅赛德斯在莫斯科(在我们的例子中有两个)并保存一个新的文本文件Moscow.txt与以下

Moscow;Mercedes;Red;1234
Moscow;Mercedes;Red;2345
Run Code Online (Sandbox Code Playgroud)

我将非常感谢你的帮助.

DSM*_*DSM 6

我建议调查一下熊猫图书馆.您可以对表格数据进行各种巧妙的操作.首先阅读:

>>> 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
Run Code Online (Sandbox Code Playgroud)

以不同方式对其进行索引:

>>> 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
Run Code Online (Sandbox Code Playgroud)

把它写出来:

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

您还可以同时处理多个组:

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

更新:@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
Run Code Online (Sandbox Code Playgroud)

更新#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
Run Code Online (Sandbox Code Playgroud)