3

私はpythonが初めてなので、私の質問を許してください。私の仕事では、テキスト ファイルで表された表形式のデータを扱う必要があります。値はコンマまたはセミコロンで区切られます。このようなファイルの単純化された例は、次のようになります。

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

私の目標は、モスクワにメルセデスが何台あるか (この場合は 2 台あります) を教えてくれるスクリプトを作成し、次のように新しいテキスト ファイル Moscow.txt を保存することです。

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

私はあなたの助けにとても感謝しています.

4

1 に答える 1

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

更新 #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
于 2013-03-26T14:38:37.957 に答える