Pandas で CSV から特定の行を読み取る
- インプレース代入を使用して Pandas の CSV から特定の行を読み取る
- 
          
            query関数を使用して Pandas の CSV から特定の行を読み取る
- 
          
            chunksizeを使用して Pandas の CSV から特定の行を読み取る
- 
          
            locを使用して Pandas で CSV から特定の行を読み取る
- 
          
            ilocを使用して 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
このデータフレームを使用して、特定の行を選択 (または読み取り) できるようになりました。 たとえば、fyearq が 2017 より上にある行のみが必要な場合は、インプレース代入を使用できます。
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 演算子を使用して、[] 内で複数のインデックスを渡すことができます。 次に、インデックスを持つすべての行が読み取られます。
ここでは、インデックス 12、13、および 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 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