Pandas で CSV から特定の行を読み取る

Olorunfemi Akinlua 2023年6月21日
  1. インプレース代入を使用して Pandas の CSV から特定の行を読み取る
  2. query 関数を使用して Pandas の CSV から特定の行を読み取る
  3. chunksize を使用して Pandas の CSV から特定の行を読み取る
  4. loc を使用して Pandas で CSV から特定の行を読み取る
  5. iloc を使用して Pandas の CSV から特定の行を読み取る
Pandas で CSV から特定の行を読み取る

データを操作するときに、アクセスできるすべてのデータが必要なわけではありません。 多くの場合、データの一部だけが必要になることがあります。

Python を使用すると、データの特定のセクションを操作できます。

CSV ファイルを操作する場合、Pandas で CSV から特定の行を操作して読み取ることができます。 この記事では、Pandas で CSV の特定の行を操作する方法について説明します。

インプレース代入を使用して Pandas の CSV から特定の行を読み取る

読み取りプロセス中に CSV から特定の行を読み取ることはできません (read_csv 関数を使用)。 それでも、読み取り操作が完了した後、インプレース割り当てを使用して、必要なデータフレームから特定の行を選択できます。

説明のために、こちら に添付された CSV ファイルを使用します。 まず、CSV ファイル - leverage.csv を読みましょう。

import pandas as pd

df = pd.read_csv("leverage.csv")

print(df.head())

出力:

gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq datacqtr  \
0   1300  20150331    2015     1   INDL      C      D     STD    USD   2015Q1
1   1300  20150630    2015     2   INDL      C      D     STD    USD   2015Q2
2   1300  20150930    2015     3   INDL      C      D     STD    USD   2015Q3
3   1300  20151231    2015     4   INDL      C      D     STD    USD   2015Q4
4   1300  20160331    2016     1   INDL      C      D     STD    USD   2016Q1

  datafqtr      atq    cshoq   dlttq     lctq costat   prccq
0   2015Q1  45357.0  781.707  5661.0  15432.0      A  104.31
1   2015Q2  46412.0  781.762  5562.0  15574.0      A  101.97
2   2015Q3  46625.0  770.691  5599.0  16367.0      A   94.69
3   2015Q4  49316.0  770.400  5554.0  18371.0      A  103.57
4   2016Q1  50365.0  762.115  9700.0  15659.0      A  112.05

このデータフレームを使用して、特定の行を選択 (または読み取り) できるようになりました。 たとえば、fyearq2017 より上にある行のみが必要な場合は、インプレース代入を使用できます。

df = df[df["fyearq"] > 2017]
print(df.head())

出力:

gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq  \
59    1690  20171231    2018     1   INDL      C      D     STD    USD
107   2111  20171231    2018     1   INDL      C      D     STD    USD
179   2663  20171031    2018     1   INDL      C      D     STD    USD
335   3980  20171231    2018     1   INDL      C      D     STD    USD
670   6547  20171231    2018     1   INDL      C      D     STD    USD

    datacqtr datafqtr       atq     cshoq     dlttq      lctq costat   prccq
59    2017Q4   2018Q1  406794.0  5081.651  103922.0  115788.0      A  169.23
107   2017Q4   2018Q1   55363.0   266.242   22095.0    4895.0      A  214.06
179   2017Q3   2018Q1    7746.0   301.000    2269.0    2583.0      A   47.37
335   2017Q4   2018Q1   97734.0  1500.000   20082.0   19875.0      A  107.51
670   2017Q4   2018Q1    6701.1    48.340    2030.0    1211.3      A   75.15

query 関数を使用して Pandas の CSV から特定の行を読み取る

インプレース代入を使用する代わりに、query 関数 を使用できます。これにより、クエリ文字列をブール式で渡すことができ、式を満たす行が選択されます。

"fyearq > 2017" という文字列を query 関数に渡すことで、前のセクションと同じ効果を得ることができます。

df = df.query("fyearq > 2017")
print(df)

出力:

gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq  \
59    1690  20171231    2018     1   INDL      C      D     STD    USD
107   2111  20171231    2018     1   INDL      C      D     STD    USD
179   2663  20171031    2018     1   INDL      C      D     STD    USD
335   3980  20171231    2018     1   INDL      C      D     STD    USD
670   6547  20171231    2018     1   INDL      C      D     STD    USD
...

chunksize を使用して Pandas の CSV から特定の行を読み取る

ただし、CSV ファイルをバッチで処理する必要がある場合 (選択、制約、またはメモリのために)、chunksize パラメーターを使用して一部の行のみを読み取ることができます。 したがって、read_csv 関数内で、chunksize パラメーターを指定し、その結果を、データセットのチャンクにアクセスするためにループできる反復子オブジェクトにします。

ここでは、chunksize を 60 に指定したため、60 行のみがロードされます。

chunksize = 60
filename = "leverage.csv"
with pd.read_csv(filename, chunksize=chunksize) as reader:
    for chunk in reader:
        print(chunk)
        print("--------------------------------")

出力:

gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq  \
0    1300  20150331    2015     1   INDL      C      D     STD    USD
1    1300  20150630    2015     2   INDL      C      D     STD    USD
2    1300  20150930    2015     3   INDL      C      D     STD    USD
3    1300  20151231    2015     4   INDL      C      D     STD    USD
...
57   1690  20170630    2017     3   INDL      C      D     STD    USD
58   1690  20170930    2017     4   INDL      C      D     STD    USD
59   1690  20171231    2018     1   INDL      C      D     STD    USD
--------------------------------
     gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq  \
60    1837  20150331    2015     1   INDL      C      D     STD    USD
61    1837  20150630    2015     2   INDL      C      D     STD    USD
62    1837  20150930    2015     3   INDL      C      D     STD    USD
...

--- を使用して、一度に 60 行のみがロードされることを示しました。

loc を使用して Pandas で CSV から特定の行を読み取る

query 関数やインプレース代入と同様に、loc 演算子を使用して、読み取る特定の行を定義するブール式を渡すことができます。

df = df.loc[df["fyearq"] > 2017]
print(df)

出力:

gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq  \
59    1690  20171231    2018     1   INDL      C      D     STD    USD
107   2111  20171231    2018     1   INDL      C      D     STD    USD
179   2663  20171031    2018     1   INDL      C      D     STD    USD
335   3980  20171231    2018     1   INDL      C      D     STD    USD
670   6547  20171231    2018     1   INDL      C      D     STD    USD
...

iloc を使用して Pandas の CSV から特定の行を読み取る

行のセットが必要で、そのインデックスがわかっている場合は、iloc 演算子を使用して、[] 内で複数のインデックスを渡すことができます。 次に、インデックスを持つすべての行が読み取られます。

ここでは、インデックス 1213、および 45 を持つ行のみを読み取ります。

df = df.iloc[[12, 13, 45]]
print(df)

出力:

gvkey  datadate  fyearq  fqtr indfmt consol popsrc datafmt curcdq  \
12   1440  20150331    2015     1   INDL      C      D     STD    USD
13   1440  20150630    2015     2   INDL      C      D     STD    USD
45   1487  20170630    2017     2   INDL      C      D     STD    USD
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Pandas CSV