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