我是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)
我将非常感谢你的帮助.
我建议调查一下熊猫图书馆.您可以对表格数据进行各种巧妙的操作.首先阅读:
>>> 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)
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |