<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kotablog.pro</title>
	<atom:link href="https://kotablog.pro/feed/" rel="self" type="application/rss+xml" />
	<link>https://kotablog.pro</link>
	<description></description>
	<lastBuildDate>Thu, 27 Nov 2025 07:01:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://kotablog.pro/wp-content/uploads/2022/11/cropped-D01_1353icon_512r-2-32x32.png</url>
	<title>kotablog.pro</title>
	<link>https://kotablog.pro</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Pandas.DataFrameでデータ集計 – 【Pythonプログラミング３ ～Pandas編～】</title>
		<link>https://kotablog.pro/python-aggregate-dataframe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-aggregate-dataframe</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Wed, 26 Nov 2025 02:36:33 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1229</guid>

					<description><![CDATA[<p>PandasのDataFrameでのデータ集計方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．演習用プログラムのダウンロード 演習用プログラム（ practice21.py ）、２つのE [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-aggregate-dataframe/">Pandas.DataFrameでデータ集計 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>PandasのDataFrameでのデータ集計方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice21.py ）、２つのExcelファイル（ 商品一覧.xlsx、販売実績.xlsx ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice21.py、商品一覧.xlsx、販売実績.xlsx を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice21-txt/'>practice21.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 7.72 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice21-txt/?wpdmdl=1214&refresh=69d4552eed8431775523118">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsx.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/%e5%95%86%e5%93%81%e4%b8%80%e8%a6%a7-xlsx/'>商品一覧.xlsx</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 14.04 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/%e5%95%86%e5%93%81%e4%b8%80%e8%a6%a7-xlsx/?wpdmdl=1215&refresh=69d4552eeeb721775523118">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsx.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/%e8%b2%a9%e5%a3%b2%e5%ae%9f%e7%b8%be-xlsx/'>販売実績.xlsx</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 10.85 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/%e8%b2%a9%e5%a3%b2%e5%ae%9f%e7%b8%be-xlsx/?wpdmdl=1217&refresh=69d4552eef4111775523118">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>２．ソースコードの表示</h2>
<p>メモ帳を使って、演習用プログラム（ practice21.py ）を開きます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2025/11/notepad-practice21.png" alt="practice21.py" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice21.py</p></div><br />
<!---------------------------------------------------------------------></p>
<h2>３．DataFrameでデータ集計</h2>
<p><!--------------------------------></p>
<h3>① 販売実績ファイルと商品一覧ファイルの読み込み</h3>
<p>コマンドプロンプト で practice21.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# 販売実績ファイルと商品一覧ファイルの読み込み
#

販売実績ファイル名：C:\Python\販売実績.xlsx

      年月  商品コード  数量
0   202511  A0001          8
1   202511  A0002          3
2   202511  A0003          4
3   202511  A0007          2
4   202511  A0010          2
5   202512  A0001          4
6   202512  A0003          2
7   202512  A0004          1
8   202512  A0005          3
9   202512  A0006          5
10  202601  A0008          5
11  202601  A0010          1
12  202601  A0005          4
13  202601  A9999          3
14  202601  A0001          2
（行数：15、列数：3）

商品一覧ファイル名：C:\Python\商品一覧.xlsx

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900
9  A0010       ライム  1000
（行数：10、列数：4）
</pre>
<p>&nbsp;<br />
販売実績ファイル（Excel）と商品一覧ファイル（Excel）を読み込んで、df販売実績（DataFrame）と df商品一覧（DataFrame）を作成します。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
19&emsp;#---------------------------------------------------------------------------
20&emsp;#
21&emsp;# 販売実績ファイルと商品一覧ファイルの読み込み
22&emsp;#
23&emsp;#---------------------------------------------------------------------------
24&emsp;
25&emsp;print("\n")
26&emsp;print("#")
27&emsp;print("# 販売実績ファイルと商品一覧ファイルの読み込み")
28&emsp;print("#")
29&emsp;
30&emsp;# 販売実績ファイルの読み込み
31&emsp;filename = dirHome + r"\販売実績.xlsx"
32&emsp;print("\n販売実績ファイル名：" + filename + "\n")
33&emsp;
34&emsp;# DataFrameを作成
35&emsp;<span class="marker">df販売実績 = pd.read_excel(filename, sheet_name = 'Sheet1', dtype = object)</span>
36&emsp;
37&emsp;print(df販売実績)
38&emsp;print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
39&emsp;
40&emsp;
41&emsp;# 商品一覧ファイルの読み込み
42&emsp;filename = dirHome + r"\商品一覧.xlsx"
43&emsp;print("\n商品一覧ファイル名：" + filename + "\n")
44&emsp;
45&emsp;# DataFrameを作成
46&emsp;<span class="marker">df商品一覧 = pd.read_excel(filename, sheet_name = 'Sheet3', dtype = object)</span>
47&emsp;
48&emsp;# 欠損値を空文字で埋める
49&emsp;df商品一覧 = df商品一覧.fillna("")
50&emsp;
51&emsp;print(df商品一覧)
52&emsp;print("（行数：" + str(df商品一覧.shape[0]) + "、列数：" + str(df商品一覧.shape[1]) + "）")
53&emsp;
54&emsp;#終了１
55&emsp;sys.exit()
</code>
</pre>
<p>35行目で、販売実績ファイルを読み込んで、df販売実績（DataFrame）を作成しています。<br />
46行目で、商品一覧ファイルを読み込んで、df商品一覧（DataFrame）を作成しています。<br />
df商品一覧 には欠損値(NaN)が含まれているので、49行目で fillna() を使って空文字で埋めています。</p>
<p><!--------------------------------></p>
<h3>② 販売実績ファイルに商品一覧ファイルを結合（横方向）</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# 販売実績ファイルに商品一覧ファイルを結合（横方向）
#

*** 商品コードをキーにして左外部結合（how = 'left'）***

      年月  商品コード  数量  商品名  単価  産地
0   202511  A0001          8  みかん   100  和歌山
1   202511  A0002          3  メロン   200  茨城県
2   202511  A0003          4  レモン   300  広島県
3   202511  A0007          2  スイカ   700  熊本県
4   202511  A0010          2  ライム  1000
5   202512  A0001          4  みかん   100  和歌山
6   202512  A0003          2  レモン   300  広島県
7   202512  A0004          1  りんご   400
8   202512  A0005          3  バナナ   500  沖縄県
9   202512  A0006          5  ぶどう   600  千葉県
10  202601  A0008          5  イチゴ   800  栃木県
11  202601  A0010          1  ライム  1000
12  202601  A0005          4  バナナ   500  沖縄県
13  202601  A9999          3  NaN      NaN  NaN
14  202601  A0001          2  みかん   100  和歌山
（行数：15、列数：6）
</pre>
<p>&nbsp;<br />
商品コードをキーにして、販売実績ファイルに商品一覧ファイルを結合しています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
58&emsp;#---------------------------------------------------------------------------
59&emsp;#
60&emsp;# 販売実績ファイルに商品一覧ファイルを結合（横方向）
61&emsp;#
62&emsp;#---------------------------------------------------------------------------
63&emsp;
64&emsp;print("\n")
65&emsp;print("#")
66&emsp;print("# 販売実績ファイルに商品一覧ファイルを結合（横方向）")
67&emsp;print("#")
68&emsp;
69&emsp;# 商品コードをキーにして左外部結合（how = 'left'）
70&emsp;print("\n*** 商品コードをキーにして左外部結合（how = 'left'）***\n")
71&emsp;<span class="marker">df結合 = pd.merge(df販売実績, df商品一覧, on = '商品コード', how = 'left')</span>
72&emsp;
73&emsp;print(df結合)
74&emsp;print("（行数：" + str(df結合.shape[0]) + "、列数：" + str(df結合.shape[1]) + "）")
75&emsp;
76&emsp;#終了２
77&emsp;sys.exit()
</code>
</pre>
<p>71行目で、merge() を使い、商品コードをキー（ on = '商品コード' ）にして、販売実績ファイルに商品一覧ファイルを結合しています。</p>
<p><!--------------------------------></p>
<h3>③ 不要なデータを削除</h3>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# 不要なデータを削除
#

*** 商品名、単価のいずれかに欠損値(NaN)が含まれる行を削除 ***

      年月  商品コード  数量  商品名  単価  産地
0   202511  A0001          8  みかん   100  和歌山
1   202511  A0002          3  メロン   200  茨城県
2   202511  A0003          4  レモン   300  広島県
3   202511  A0007          2  スイカ   700  熊本県
4   202511  A0010          2  ライム  1000
5   202512  A0001          4  みかん   100  和歌山
6   202512  A0003          2  レモン   300  広島県
7   202512  A0004          1  りんご   400
8   202512  A0005          3  バナナ   500  沖縄県
9   202512  A0006          5  ぶどう   600  千葉県
10  202601  A0008          5  イチゴ   800  栃木県
11  202601  A0010          1  ライム  1000
12  202601  A0005          4  バナナ   500  沖縄県
14  202601  A0001          2  みかん   100  和歌山
（行数：14、列数：6）

*** 産地の列を削除 ***

      年月  商品コード  数量  商品名  単価
0   202511  A0001          8  みかん   100
1   202511  A0002          3  メロン   200
2   202511  A0003          4  レモン   300
3   202511  A0007          2  スイカ   700
4   202511  A0010          2  ライム  1000
5   202512  A0001          4  みかん   100
6   202512  A0003          2  レモン   300
7   202512  A0004          1  りんご   400
8   202512  A0005          3  バナナ   500
9   202512  A0006          5  ぶどう   600
10  202601  A0008          5  イチゴ   800
11  202601  A0010          1  ライム  1000
12  202601  A0005          4  バナナ   500
14  202601  A0001          2  みかん   100
（行数：14、列数：5）
</pre>
<p>&nbsp;<br />
欠損値(NaN)が含まれる行（インデックス 13）を削除して、産地 の列を削除しています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
 80&emsp;#---------------------------------------------------------------------------
 81&emsp;#
 82&emsp;# 不要なデータを削除
 83&emsp;#
 84&emsp;#---------------------------------------------------------------------------
 85&emsp;
 86&emsp;print("\n")
 87&emsp;print("#")
 88&emsp;print("# 不要なデータを削除")
 89&emsp;print("#")
 90&emsp;
 91&emsp;# 不要な行を削除
 92&emsp;print("\n*** 商品名、単価のいずれかに欠損値(NaN)が含まれる行を削除 ***\n")
 93&emsp;<span class="marker">df結合 = df結合.dropna(subset = ['商品名','単価'])</span>
 94&emsp;
 95&emsp;print(df結合)
 96&emsp;print("（行数：" + str(df結合.shape[0]) + "、列数：" + str(df結合.shape[1]) + "）")
 97&emsp;
 98&emsp;
 99&emsp;# 産地の列を削除
100&emsp;print("\n*** 産地の列を削除 ***\n")
101&emsp;<span class="marker">df結合 = df結合.drop('産地', axis = 1)</span>
102&emsp;
103&emsp;print(df結合)
104&emsp;print("（行数：" + str(df結合.shape[0]) + "、列数：" + str(df結合.shape[1]) + "）")
105&emsp;
106&emsp;#終了３
107&emsp;sys.exit()
</code>
</pre>
<p>93行目の dropna() と subsetパラメータで、商品名、単価のいずれかに欠損値(NaN)が含まれる行を削除しています<br />
101行目で、産地 の列を削除しています。axisパラメータに 1 をセットすると列の削除になります。</p>
<p><!--------------------------------></p>
<h3>④ 販売額（単価×数量）の列を追加</h3>
<p>ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# 販売額（単価×数量）の列を追加
#
      年月  商品コード  数量  商品名  単価  販売額
0   202511  A0001          8  みかん   100     800
1   202511  A0002          3  メロン   200     600
2   202511  A0003          4  レモン   300    1200
3   202511  A0007          2  スイカ   700    1400
4   202511  A0010          2  ライム  1000    2000
5   202512  A0001          4  みかん   100     400
6   202512  A0003          2  レモン   300     600
7   202512  A0004          1  りんご   400     400
8   202512  A0005          3  バナナ   500    1500
9   202512  A0006          5  ぶどう   600    3000
10  202601  A0008          5  イチゴ   800    4000
11  202601  A0010          1  ライム  1000    1000
12  202601  A0005          4  バナナ   500    2000
14  202601  A0001          2  みかん   100     200
（行数：14、列数：6）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
110&emsp;#---------------------------------------------------------------------------
111&emsp;#
112&emsp;# 販売額（単価×数量）の列を追加
113&emsp;#
114&emsp;#---------------------------------------------------------------------------
115&emsp;
116&emsp;print("\n")
117&emsp;print("#")
118&emsp;print("# 販売額（単価×数量）の列を追加")
119&emsp;print("#")
120&emsp;
121&emsp;<span class="marker">df結合['販売額'] = df結合['単価'] * df結合['数量']</span>
122&emsp;
123&emsp;print(df結合)
124&emsp;print("（行数：" + str(df結合.shape[0]) + "、列数：" + str(df結合.shape[1]) + "）")
125&emsp;
126&emsp;#終了４
127&emsp;sys.exit()
</code>
</pre>
<p>121行目で、単価×数量 の計算結果を 販売額 の列に追加しています。</p>
<p><!--------------------------------></p>
<h3>⑤ 年月毎に販売額を集計</h3>
<p>ソースコード <b>#終了４</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# 年月毎に販売額を集計
#

解説：
DataFrame.groupby('グループ化したい列名')['集計したい列名'].集計関数()

年月
202511    6000
202512    5900
202601    7200
Name: 販売額, dtype: object
（行数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
130&emsp;#---------------------------------------------------------------------------
131&emsp;#
132&emsp;# 年月毎に販売額を集計
133&emsp;#
134&emsp;#---------------------------------------------------------------------------
135&emsp;
136&emsp;print("\n")
137&emsp;print("#")
138&emsp;print("# 年月毎に販売額を集計")
139&emsp;print("#")
140&emsp;
141&emsp;print("\n解説：")
142&emsp;print("DataFrame.groupby('グループ化したい列名')['集計したい列名'].集計関数()\n")
143&emsp;
144&emsp;<span class="marker">result = df結合.groupby('年月')['販売額'].sum()</span>
145&emsp;
146&emsp;print(result)
147&emsp;print("（行数：" + str(len(result)) + "）")  # len()は要素の数を返す関数
148&emsp;
149&emsp;#終了５
150&emsp;sys.exit()
</code>
</pre>
<p>144行で、年月毎に販売額を集計しています。<br />
　groupby('グループ化したい列名')['集計したい列名'].集計関数()<br />
　グループ化したい列名 → 年月<br />
　集計したい列名 → 販売額<br />
　集計関数() → sum()</p>
<p><!--------------------------------></p>
<h3>⑥ 商品毎に販売額を集計</h3>
<p>ソースコード <b>#終了５</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# 商品毎に販売額を集計
#

*** 商品毎に販売額を集計 ***

商品コード
A0001        1400
A0002         600
A0003        1800
A0004         400
A0005        3500
A0006        3000
A0007        1400
A0008        4000
A0010        3000
Name: 販売額, dtype: object
（行数：9）

*** 商品名の列を追加 ***

   商品コード  商品名  販売額
0  A0001       みかん    1400
1  A0002       メロン     600
2  A0003       レモン    1800
3  A0004       りんご     400
4  A0005       バナナ    3500
5  A0006       ぶどう    3000
6  A0007       スイカ    1400
7  A0008       イチゴ    4000
8  A0010       ライム    3000
（行数：9、列数：3）
</pre>
<p>&nbsp;<br />
商品毎に販売額を集計後に、商品一覧から商品コードをキーにして商品名を取得しています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
153&emsp;#---------------------------------------------------------------------------
154&emsp;#
155&emsp;# 商品毎に販売額を集計
156&emsp;#
157&emsp;#---------------------------------------------------------------------------
158&emsp;
159&emsp;print("\n")
160&emsp;print("#")
161&emsp;print("# 商品毎に販売額を集計")
162&emsp;print("#")
163&emsp;
164&emsp;# 商品毎に販売額を集計
165&emsp;print("\n*** 商品毎に販売額を集計 ***\n")
166&emsp;<span class="marker">sri商品集計 = df結合.groupby('商品コード')['販売額'].sum()</span>
167&emsp;
168&emsp;print(sri商品集計)
169&emsp;print("（行数：" + str(len(sri商品集計)) + "）")  # len()は要素の数を返す関数
170&emsp;
171&emsp;# 商品名の列を追加
172&emsp;print("\n*** 商品名の列を追加 ***\n")
173&emsp;# 商品一覧と結合
174&emsp;<span class="marker">df商品集計 = pd.merge(sri商品集計, df商品一覧, on = '商品コード', how = 'left')</span>
175&emsp;
176&emsp;# 必要な列を選択
177&emsp;<span class="marker">df商品集計 = df商品集計[['商品コード','商品名','販売額']]</span>
178&emsp;
179&emsp;print(df商品集計)
180&emsp;print("（行数：" + str(df商品集計.shape[0]) + "、列数：" + str(df商品集計.shape[1]) + "）")
181&emsp;
182&emsp;#終了６
183&emsp;sys.exit()
</code>
</pre>
<p>166行目で、商品毎に販売額を集計しています。<br />
　groupby('グループ化したい列名')['集計したい列名'].集計関数()<br />
　グループ化したい列名 → 商品コード<br />
　集計したい列名 → 販売額<br />
　集計関数() → sum()<br />
商品名の列を追加するために、174行目で、merge() を使い、商品コードをキー（ on = '商品コード' ）にして、商品一覧ファイルを結合しています。<br />
177行目で、必要な列（商品コード、商品名、販売額）のみにしています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>４．ＳＱＬ文を使った集計</h2>
<p><!--------------------------------></p>
<h3>① ＳＱＬ文を使うための準備</h3>
<p>SQLite「組み込み型のリレーショナルデータベース」を使います。<br />
Pythonにはじめから SQLite（sqlite3 モジュール）が含まれています。</p>
<p>準備手順<br />
・sqlite3 モジュール と pandas.io.sql モジュール を import します。<br />
pandas.io.sql とは、PandasのDataFrameとSQLデータベースの間でデータをやり取りするためのモジュールです。<br />
・sqlite3 を作成します。<br />
・DataFrameをsqlite3にテーブルとして格納します。</p>
<p>ソースコード <b>#終了６</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# ＳＱＬ文を使った集計
#

販売実績のデータ
      年月  商品コード  数量
0   202511  A0001          8
1   202511  A0002          3
2   202511  A0003          4
3   202511  A0007          2
4   202511  A0010          2
5   202512  A0001          4
6   202512  A0003          2
7   202512  A0004          1
8   202512  A0005          3
9   202512  A0006          5
10  202601  A0008          5
11  202601  A0010          1
12  202601  A0005          4
13  202601  A9999          3
14  202601  A0001          2
（行数：15、列数：3）

商品一覧のデータ
   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900
9  A0010       ライム  1000
（行数：10、列数：4）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
 10&emsp;<span class="marker">import sqlite3</span>                # SQLite3 データベース
 11&emsp;<span class="marker">import pandas.io.sql as psql</span>  # SQL接続用

186&emsp;#---------------------------------------------------------------------------
187&emsp;#
188&emsp;# ＳＱＬ文を使った集計
189&emsp;#
190&emsp;#---------------------------------------------------------------------------
191&emsp;
192&emsp;print("\n")
193&emsp;print("#")
194&emsp;print("# ＳＱＬ文を使った集計")
195&emsp;print("#")
196&emsp;
197&emsp;# sqlite3を作成
198&emsp;<span class="marker">connection = sqlite3.connect(':memory:')</span>
199&emsp;<span class="marker">connection.isolation_level = None</span>  # Noneで自動コミットモード
200&emsp;<span class="marker">cursor = connection.cursor()</span>
201&emsp;
202&emsp;# DataFrameをsqlite3にテーブルとして格納
203&emsp;<span class="marker">df販売実績.to_sql('販売実績', connection, if_exists = 'append', index = None)</span>
204&emsp;<span class="marker">df商品一覧.to_sql('商品一覧', connection, if_exists = 'append', index = None)</span>
205&emsp;
206&emsp;# 販売実績のデータを全て取得
207&emsp;<span class="marker">select_query = """</span>
208&emsp;<span class="marker">SELECT * FROM 販売実績;</span>
209&emsp;<span class="marker">"""</span>
210&emsp;<span class="marker">df結果 = psql.read_sql(select_query, connection)</span>
211&emsp;
212&emsp;print("\n販売実績のデータ")
213&emsp;print(df結果)
214&emsp;print("（行数：" + str(df結果.shape[0]) + "、列数：" + str(df結果.shape[1]) + "）")
215&emsp;
216&emsp;# 商品一覧のデータを全て取得
217&emsp;<span class="marker">select_query = """</span>
218&emsp;<span class="marker">SELECT * FROM 商品一覧;</span>
219&emsp;<span class="marker">"""</span>
220&emsp;<span class="marker">df結果 = psql.read_sql(select_query, connection)</span>
221&emsp;
222&emsp;print("\n商品一覧のデータ")
223&emsp;print(df結果)
224&emsp;print("（行数：" + str(df結果.shape[0]) + "、列数：" + str(df結果.shape[1]) + "）")
225&emsp;
226&emsp;#終了７
227&emsp;sys.exit()
</code>
</pre>
<p>10行目で、sqlite3 を import しています。<br />
11行目で、pandas.io.sql を import しています。<br />
198行目～200行目で、sqlite3 を作成しています。<br />
203行目で 販売実績（DataFrame）を、204行目で 商品一覧（DataFrame）を sqlite3 のテーブルとして格納しています。<br />
208行目で 販売実績テーブルの全件データを取得するＳＱＬ文を用意しています。<br />
210行目で ＳＱＬ文を実行して、販売実績の全件データ（DataFrame）を取得しています。<br />
218行目で 商品一覧テーブルの全件データを取得するＳＱＬ文を用意しています。<br />
220行目で ＳＱＬ文を実行して、商品一覧の全件データ（DataFrame）を取得しています。</p>
<p><!--------------------------------></p>
<h3>② 年月毎に販売額を集計</h3>
<p>ＳＱＬ文を使って、年月毎に販売額を集計します。</p>
<p>ソースコード <b>#終了７</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 年月毎に販売額を集計 ***

     年月  販売額
0  202511    6000
1  202512    5900
2  202601    7200
（行数：3、列数：2）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
230&emsp;# 年月毎に販売額を集計
231&emsp;print("\n*** 年月毎に販売額を集計 ***\n")
232&emsp;
233&emsp;<span class="marker">select_query = """</span>
234&emsp;<span class="marker">SELECT</span>
235&emsp;  <span class="marker">A.年月,</span>
236&emsp;  <span class="marker">SUM(B.単価 * A.数量) as 販売額</span> 
237&emsp;<span class="marker">FROM  販売実績 as A,</span>
238&emsp;      <span class="marker">商品一覧 as B</span> 
239&emsp;<span class="marker">WHERE A.商品コード = B.商品コード</span> 
240&emsp;<span class="marker">GROUP BY A.年月;</span>
241&emsp;<span class="marker">"""</span>
242&emsp;<span class="marker">df結果 = psql.read_sql(select_query, connection)</span>
243&emsp;
244&emsp;print(df結果)
245&emsp;print("（行数：" + str(df結果.shape[0]) + "、列数：" + str(df結果.shape[1]) + "）")
246&emsp;
247&emsp;#終了８
248&emsp;sys.exit()
</code>
</pre>
<p>233行目～241行目で、年月毎に販売額を集計するＳＱＬ文を用意しています。<br />
242行目で、ＳＱＬ文を実行して、集計結果を df結果（DataFrame）に格納しています。</p>
<p><!--------------------------------></p>
<h3>③ 商品毎に販売額を集計</h3>
<p>ＳＱＬ文を使って、商品毎に販売額を集計します。</p>
<p>ソースコード <b>#終了８</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 商品毎に販売額を集計 ***

   商品コード  商品名  販売額
0  A0001       みかん    1400
1  A0002       メロン     600
2  A0003       レモン    1800
3  A0004       りんご     400
4  A0005       バナナ    3500
5  A0006       ぶどう    3000
6  A0007       スイカ    1400
7  A0008       イチゴ    4000
8  A0010       ライム    3000
（行数：9、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
251&emsp;# 商品毎に販売額を集計
252&emsp;print("\n*** 商品毎に販売額を集計 ***\n")
253&emsp;
254&emsp;<span class="marker">select_query = """</span>
255&emsp;<span class="marker">SELECT</span>
256&emsp;  <span class="marker">A.商品コード         as 商品コード,</span>
257&emsp;  <span class="marker">B.商品名             as 商品名,</span>
258&emsp;  <span class="marker">SUM(B.単価 * A.数量) as 販売額</span> 
259&emsp;<span class="marker">FROM  販売実績 as A,</span>
260&emsp;      <span class="marker">商品一覧 as B</span> 
261&emsp;<span class="marker">WHERE A.商品コード = B.商品コード</span> 
262&emsp;<span class="marker">GROUP BY A.商品コード;</span>
263&emsp;"""
264&emsp;<span class="marker">df結果 = psql.read_sql(select_query, connection)</span>
265&emsp;
266&emsp;print(df結果)
267&emsp;print("（行数：" + str(df結果.shape[0]) + "、列数：" + str(df結果.shape[1]) + "）")
268&emsp;
269&emsp;sys.exit()
</code>
</pre>
<p>254行目～263行目で、商品毎に販売額を集計するＳＱＬ文を用意しています。<br />
264行目で、ＳＱＬ文を実行して、集計結果を df結果（DataFrame）に格納しています。<br />
&nbsp;</p>
<table class="footerguide">
<tr>
<td class="fgleft">
<a style="text-decoration: none;" href="https://kotablog.pro/python-mastering-dataframe/">＜Pandas.DataFrameの利用</a>
</td>
<td class="fgcenter">
Pandas.DataFrameでデータ集計
</td>
<td class="fgright">
</td>
</tr>
</table><p>The post <a href="https://kotablog.pro/python-aggregate-dataframe/">Pandas.DataFrameでデータ集計 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pandas.DataFrameの利用 – 【Pythonプログラミング３ ～Pandas編～】</title>
		<link>https://kotablog.pro/python-mastering-dataframe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-mastering-dataframe</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Wed, 26 Nov 2025 02:33:01 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1227</guid>

					<description><![CDATA[<p>PandasのDataFrameの利用方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．演習用プログラムのダウンロード 演習用プログラム（ practice20.py ）、２つのExcel [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-mastering-dataframe/">Pandas.DataFrameの利用 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>PandasのDataFrameの利用方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice20.py ）、２つのExcelファイル（ 商品一覧.xlsx、販売実績.xlsx ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice20.py、商品一覧.xlsx、販売実績.xlsx を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice20-txt/'>practice20.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 23.45 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice20-txt/?wpdmdl=1213&refresh=69d4552f006a61775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsx.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/%e5%95%86%e5%93%81%e4%b8%80%e8%a6%a7-xlsx/'>商品一覧.xlsx</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 14.04 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/%e5%95%86%e5%93%81%e4%b8%80%e8%a6%a7-xlsx/?wpdmdl=1215&refresh=69d4552f00f931775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsx.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/%e8%b2%a9%e5%a3%b2%e5%ae%9f%e7%b8%be-xlsx/'>販売実績.xlsx</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 10.85 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/%e8%b2%a9%e5%a3%b2%e5%ae%9f%e7%b8%be-xlsx/?wpdmdl=1217&refresh=69d4552f014651775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>２．ソースコードの表示</h2>
<p>メモ帳を使って、演習用プログラム（ practice20.py ）を開きます。</p>
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" class="size-medium wp-image-543" src="https://kotablog.pro/wp-content/uploads/2025/11/notepad-practice20.png" alt="practice20.py" width="800" height="600" /><p id="caption-attachment-543" class="wp-caption-text">practice20.py</p></div>
<p><!---------------------------------------------------------------------></p>
<h2>３．データの取り出し</h2>
<p><!--------------------------------></p>
<h3>① ExcelファイルからDataFrameを作成</h3>
<p>コマンドプロンプト で practice20.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** ExcelファイルからDataFrameを作成 ****

商品一覧ファイル名：C:\Python\商品一覧.xlsx

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県
（行数：5、列数：4）
</pre>
<p>Excelファイル（商品一覧.xlsx）を読み込んで、５行４列のDataFrameを作成しました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
17 #---------------------------------------------------------------------------
18 #
19 # ExcelファイルからDataFrameを作成
20 #
21 #---------------------------------------------------------------------------
22 
23 print("\n*** ExcelファイルからDataFrameを作成 ****")
24 
25 filename = dirHome + r"\商品一覧.xlsx"
26 print("\n商品一覧ファイル名：" + filename + "\n")
27 
28 # DataFrameを作成
29 <span class="marker">df商品一覧 = pd.read_excel(filename, sheet_name = 'Sheet1')</span>
30 
31 print(df商品一覧)
32 print("（行数：" + str(df商品一覧.shape[0]) + "、列数：" + str(df商品一覧.shape[1]) + "）")
33 #print(df商品一覧.dtypes)  # 項目毎のデータ型
34 
35 #終了１
36 #sys.exit()
</code></pre>
<p>29行目の read_excel() で、ExcelファイルからDataFrameを作成しています。</p>
<p><!--------------------------------></p>
<h3>② 列データの取り出し</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 列データの取り出し
#

*** 商品名の列をSeriesとして取り出す ***

0    みかん
1    メロン
2    レモン
3    りんご
4    バナナ
Name: 商品名, dtype: object
（行数：5）
&lt;class 'pandas.core.series.Series'&gt;

*** 商品名の列をDataFrameとして取り出す ***

   商品名
0  みかん
1  メロン
2  レモン
3  りんご
4  バナナ
（行数：5、列数：1）
&lt;class 'pandas.core.frame.DataFrame'&gt;

*** 商品名の文字数を取り出す ***

0    3
1    3
2    3
3    3
4    3
Name: 商品名, dtype: int64
（行数：5）
&lt;class 'pandas.core.series.Series'&gt;

*** 商品名の先頭１文字取り出す ***

0    み
1    メ
2    レ
3    り
4    バ
Name: 商品名, dtype: object
（行数：5）
&lt;class 'pandas.core.series.Series'&gt;
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
50 # 列データの取り出し（Series）
51 print("\n*** 商品名の列をSeriesとして取り出す ***\n")
52 <span class="marker">sri = df商品一覧['商品名']</span>
</code></pre>
<p>列データを Series で取り出す<br />
52行目の df商品一覧['商品名'] とすることで商品名の列を Series で取り出せます。</p>
<pre class="bluerayscode"><code>
58 # 列データの取り出し（DataFrame）
59 print("\n*** 商品名の列をDataFrameとして取り出す ***\n")
60 <span class="marker">df = df商品一覧[['商品名']]</span>
</code></pre>
<p>列データを DataFrame で取り出す<br />
60行目の df商品一覧[['商品名']] とすることで商品名の列を DataFrame で取り出せます。</p>
<pre class="bluerayscode"><code>
66 # 商品名の文字数を取り出す
67 print("\n*** 商品名の文字数を取り出す ***\n")
68 <span class="marker">sri= df商品一覧['商品名'].str.len()</span>
</code></pre>
<p>商品名の文字数を取り出す<br />
68行目の df商品一覧['商品名'].str.len() とすることでそれぞれの行の商品名の文字数を取り出せます。</p>
<pre class="bluerayscode"><code>
74 # 商品名の先頭１文字取り出す
75 print("\n*** 商品名の先頭１文字取り出す ***\n")
76 <span class="marker">sri= df商品一覧['商品名'].str[:1]</span>

82 #終了２
83 #sys.exit()
</code></pre>
<p>商品名の先頭１文字取り出す<br />
76行目の df商品一覧['商品名'].str[:1] でスライスを使って、それぞれの行の商品名の先頭１文字を取り出しています。</p>
<p><!--------------------------------></p>
<h3>③ 複数の列データの取り出し</h3>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品コードと単価の列を取り出す ***

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
（行数：5、列数：2）
&lt;class 'pandas.core.frame.DataFrame'&gt;
</pre>
<p>商品コードと単価の列を DataFrame で取り出しています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
86 # 複数の列データの取り出し
87 print("\n*** 商品コードと単価の列を取り出す ***\n")
88 <span class="marker">df = df商品一覧[['商品コード','単価']]</span>
89 

94 #終了３
95 #sys.exit()
</code></pre>
<p>88行目で、商品コードと単価の項目名をリストで指定して、２列を取り出しています。</p>
<p><!--------------------------------></p>
<h3>④ loc を使い、行を指定してデータを取り出す</h3>
<p>ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 行を指定してデータを取り出し（DataFrame.loc）
#

解説：
DataFrame.loc[行の指定]

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
（行数：5、列数：2）

*** インデックスが 1 の行データを取り出す ***

   商品コード  単価
1  A0002        200

*** インデックスが 1と3 の行データを取り出す ***

   商品コード  単価
1  A0002        200
3  A0004        400

*** インデックスが 1～3 の行データを取り出す ***

   商品コード  単価
1  A0002        200
2  A0003        300
3  A0004        400
</pre>
<p>&nbsp;</p>
<table style="border-collapse: collapse; width: 45%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">100</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">200</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">300</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">400</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">500</td>
</tr>
</tbody>
</table>
<p>loc を使って、行（インデックス）を指定してデータを取り出す場合<br />
loc[行の指定]</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
115 print("\n*** インデックスが 1 の行データを取り出す ***\n")
116 print(<span class="marker">df.loc[[1]]</span>)
</code></pre>
<p>インデックスが 1 の行データを取り出す<br />
116行目で loc[] に、インデックス 1 が１つ入ったリスト [1] を指定しています。 loc[[1]]</p>
<pre class="bluerayscode"><code>
118 print("\n*** インデックスが 1と3 の行データを取り出す ***\n")
119 print(<span class="marker">df.loc[[1, 3]]</span>)
</code></pre>
<p>インデックスが 1と3 の行データを取り出す<br />
119行目で loc[] に、インデックス 1 と 3 が入ったリスト [1, 3] を指定しています。 loc[[1, 3]]</p>
<pre class="bluerayscode"><code>
121 print("\n*** インデックスが 1～3 の行データを取り出す ***\n")
122 print(<span class="marker">df.loc[1:3]</span>)
123 
124 #終了４
125 #sys.exit()
</code></pre>
<p>インデックスが 1～3 の行データを取り出す<br />
122行目で loc[] に、インデックス 1 から 3 が入ったスライス 1:3 を指定しています。 loc[1:3]</p>
<p><!--------------------------------></p>
<h3>⑤ loc を使い、行と列を指定してデータを取り出す</h3>
<p>ソースコード <b>#終了４</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 行、列を指定してデータを取り出し（DataFrame.loc）
#

解説：
DataFrame.loc[行の指定, 列の指定]

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
（行数：5、列数：2）

*** インデックスが 1 の商品コードを取り出す ***

A0002

*** インデックスが 1と3 の商品コードを取り出す ***

1  A0002
3  A0004
Name: 商品コード, dtype: object

*** インデックスが 1と3 の商品コードと単価を取り出す ***

   商品コード  単価
1  A0002        200
3  A0004        400

*** インデックスが 1～3 の商品コードを取り出す ***

1  A0002
2  A0003
3  A0004
Name: 商品コード, dtype: object

*** すべての行の商品コードと単価を取り出す ***

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
</pre>
<p>&nbsp;</p>
<table style="border-collapse: collapse; width: 45%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">100</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">200</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">300</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">400</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">500</td>
</tr>
</tbody>
</table>
<p>loc を使って、行（インデックス）と列（列名）を指定してデータを取り出す場合<br />
loc[行の指定, 列の指定]</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
145 print("\n*** インデックスが 1 の商品コードを取り出す ***\n")
146 print(<span class="marker">df.loc[1, '商品コード']</span>)
</code></pre>
<p>インデックスが 1 の商品コードを取り出す<br />
146行目の loc[行の指定, 列の指定] に、行の指定 を 1、列の指定 を 商品コード にしています。 loc[1, '商品コード']</p>
<pre class="bluerayscode"><code>
148 print("\n*** インデックスが 1と3 の商品コードを取り出す ***\n")
149 print(<span class="marker">df.loc[[1, 3], '商品コード']</span>)
</code></pre>
<p>インデックスが 1と3 の商品コードを取り出す<br />
149行目の loc[行の指定, 列の指定] に、行の指定 を 1と3 の入ったリスト、列の指定 を 商品コード にしています。 loc[[1, 3], '商品コード']</p>
<pre class="bluerayscode"><code>
151 print("\n*** インデックスが 1と3 の商品コードと単価を取り出す ***\n")
152 print(<span class="marker">df.loc[[1, 3], ['商品コード', '単価']]</span>)
</code></pre>
<p>インデックスが 1と3 の商品コードと単価を取り出す<br />
152行目の loc[行の指定, 列の指定] に、行の指定 を 1と3 の入ったリスト、列の指定 を 商品コードと単価 の入ったリストにしています。 loc[[1, 3], ['商品コード', '単価']]</p>
<pre class="bluerayscode"><code>
154 print("\n*** インデックスが 1～3 の商品コードを取り出す ***\n")
155 print(<span class="marker">df.loc[1:3, '商品コード']</span>)
</code></pre>
<p>インデックスが 1～3 の商品コードを取り出す<br />
155行目の loc[行の指定, 列の指定] に、行の指定 を 1から3 のスライス、列の指定 を 商品コード にしています。 loc[1:3, '商品コード']</p>
<pre class="bluerayscode"><code>
157 print("\n*** すべての行の商品コードと単価を取り出す ***\n")
158 print(<span class="marker">df.loc[:, ['商品コード', '単価']]</span>)
159 
160 #終了５
161 #sys.exit()
</code></pre>
<p>すべての行の商品コードと単価を取り出す<br />
158行目の loc[行の指定, 列の指定] に、行の指定 を 全行（スライスの『 : 』）、列の指定 を 商品コードと単価 の入ったリストにしています。 loc[:, ['商品コード', '単価']]</p>
<p><!--------------------------------></p>
<h3>⑥ iloc を使い、行を指定してデータを取り出す</h3>
<p>ソースコード <b>#終了５</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 行を指定してデータを取り出し（DataFrame.iloc）
#

解説：
DataFrame.iloc[行の指定]

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
（行数：5、列数：2）

*** 行番号が 1 の行データを取り出す ***

   商品コード  単価
1  A0002        200

*** 行番号が 1と3 の行データを取り出す ***

   商品コード  単価
1  A0002        200
3  A0004        400

*** 行番号が 1～2 の行データを取り出す ***

   商品コード  単価
1  A0002        200
2  A0003        300
</pre>
<p>&nbsp;</p>
<table style="border-collapse: collapse; width: 60%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #ffccff;">行番号</td>
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">0</td>
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">100</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">1</td>
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">200</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">2</td>
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">300</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">3</td>
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">400</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">4</td>
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">500</td>
</tr>
</tbody>
</table>
<p>iloc を使って、行番号（ゼロから始まる番号）を指定してデータを取り出す場合<br />
iloc[行の指定]</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
181 print("\n*** 行番号が 1 の行データを取り出す ***\n")
182 print(<span class="marker">df.iloc[[1]]</span>)
</code></pre>
<p>行番号が 1 の行データを取り出す<br />
182行目で iloc[] に、行番号 1 が１つ入ったリスト [1] を指定しています。 iloc[[1]]</p>
<pre class="bluerayscode"><code>
184 print("\n*** 行番号が 1と3 の行データを取り出す ***\n")
185 print(<span class="marker">df.iloc[[1, 3]]</span>)
</code></pre>
<p>行番号が 1と3 の行データを取り出す<br />
185行目で iloc[] に、行番号 1 と 3 が入ったリスト [1, 3] を指定しています。 iloc[[1, 3]]</p>
<pre class="bluerayscode"><code>
187 print("\n*** 行番号が 1～2 の行データを取り出す ***\n")
188 print(<span class="marker">df.iloc[1:3]</span>)
189 
190 #終了６
191 #sys.exit()
</code></pre>
<p>行番号が 1～2 の行データを取り出す<br />
188行目で iloc[] に、行番号 1 から 3 が入ったスライス 1:3 を指定しています。 iloc[1:3]</p>
<p><!--------------------------------></p>
<h3>⑦ iloc を使い、行と列を指定してデータを取り出す</h3>
<p>ソースコード <b>#終了６</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 行、列を指定してデータを取り出し（DataFrame.iloc）
#

解説：
DataFrame.iloc[行の指定, 列の指定]

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
（行数：5、列数：2）

*** 行番号が 1 、列番号が 0（商品コード）のデータを取り出す ***

A0002

*** 行番号が 1と3 、列番号が 0（商品コード）のデータを取り出す ***

1  A0002
3  A0004
Name: 商品コード, dtype: object

*** 行番号が 1と3 、列番号が 0（商品コード）と 1（単価）のデータを取り出す ***

   商品コード  単価
1  A0002        200
3  A0004        400

*** 行番号が 1～2 、列番号が 0（商品コード）のデータを取り出す ***

1  A0002
2  A0003
Name: 商品コード, dtype: object

*** すべての行の列番号が 0（商品コード）と 1（単価）のデータを取り出す ***

   商品コード  単価
0  A0001        100
1  A0002        200
2  A0003        300
3  A0004        400
4  A0005        500
</pre>
<p>&nbsp;</p>
<table style="border-collapse: collapse; width: 60%; height: 120px;">
<thead>
<tr>
<td style="width: 15%; background-color: #f5f5f5;"></td>
<td style="width: 15%; background-color: #ffccff;">列番号</td>
<td style="width: 15%; background-color: #ffccff;">0</td>
<td style="width: 15%; background-color: #ffccff;">1</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #ffccff;">行番号</td>
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">0</td>
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">100</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">1</td>
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">200</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">2</td>
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">300</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">3</td>
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">400</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px; background-color: #ffccff;">4</td>
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">500</td>
</tr>
</tbody>
</table>
<p>iloc を使って、行番号（ゼロから始まる番号）と、列番号（ゼロから始まる番号）を指定してデータを取り出す場合<br />
iloc[行番号, 列番号]</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
211 print("\n*** 行番号が 1 、列番号が 0（商品コード）のデータを取り出す ***\n")
212 print(<span class="marker">df.iloc[1, 0]</span>)
</code></pre>
<p>行番号が 1 、列番号が 0（商品コード）のデータを取り出す<br />
212行目の iloc[行番号, 列番号] に、行番号 を 1、列番号 を 0 にしています。 iloc[1, 0]</p>
<pre class="bluerayscode"><code>
214 print("\n*** 行番号が 1と3 、列番号が 0（商品コード）のデータを取り出す ***\n")
215 print(<span class="marker">df.iloc[[1, 3], 0]</span>)
</code></pre>
<p>行番号が 1と3 、列番号が 0（商品コード）のデータを取り出す<br />
215行目の iloc[行番号, 列番号] に、行番号 を 1と3 の入ったリスト、列番号 を 0 にしています。 iloc[[1, 3], 0]</p>
<pre class="bluerayscode"><code>
217 print("\n*** 行番号が 1と3 、列番号が 0（商品コード）と 1（単価）のデータを取り出す ***\n")
218 print(<span class="marker">df.iloc[[1, 3], [0, 1]]</span>)
</code></pre>
<p>行番号が 1と3 、列番号が 0（商品コード）と 1（単価）のデータを取り出す<br />
218行目の iloc[行番号, 列番号] に、行番号 を 1と3 の入ったリスト、列番号 を 0と1 の入ったリストにしています。 iloc[[1, 3], [0, 1]]</p>
<pre class="bluerayscode"><code>
220 print("\n*** 行番号が 1～2 、列番号が 0（商品コード）のデータを取り出す ***\n")
221 print(<span class="marker">df.iloc[1:3, 0]</span>)
</code></pre>
<p>行番号が 1～2 、列番号が 0（商品コード）のデータを取り出す<br />
221行目の iloc[行番号, 列番号] に、行番号 を 1から3 のスライス、列番号 を 0 にしています。 iloc[1:3, 0]</p>
<pre class="bluerayscode"><code>
223 print("\n*** すべての行の列番号が 0（商品コード）と 1（単価）のデータを取り出す ***\n")
224 print(<span class="marker">df.iloc[:, [0, 1]]</span>)
225 
226 #終了７
227 #sys.exit()
</code></pre>
<p>すべての行の列番号が 0（商品コード）と 1（単価）のデータを取り出す<br />
224行目の iloc[行番号, 列番号] に、行番号 を 全行（スライスの『 : 』）、列番号 を 0と1 の入ったリストにしています。 iloc[:, [0, 1]]</p>
<p><!---------------------------------------------------------------------></p>
<h2>４．データの絞り込み</h2>
<p><!--------------------------------></p>
<h3>① 数値条件を指定したデータの絞り込み</h3>
<p>ソースコード <b>#終了７</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 条件を指定したデータの絞り込み
#

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県
（行数：5、列数：4）

*** 単価が 200 より大きなデータを取り出す ***

   商品コード  商品名  単価  産地
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県

*** 単価が 200 より大きくて 500 より小さなデータを取り出す（and条件：&amp; ）***

   商品コード  商品名  単価  産地
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県

*** 単価が 200 より小さいか 400 より大きなデータを取り出す（or条件：| ）***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
4  A0005       バナナ   500  沖縄県
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
245 print("\n*** 単価が 200 より大きなデータを取り出す ***\n")
246 <span class="marker">result = df商品一覧[df商品一覧['単価'] &gt; 200]</span>
247 print(result)
</code></pre>
<p>単価が 200 より大きなデータを取り出す<br />
246行目で、条件式を df商品一覧['単価'] &gt; 200 としています。</p>
<pre class="bluerayscode"><code>
249 print("\n*** 単価が 200 より大きくて 500 より小さなデータを取り出す（and条件：&amp; ）***\n")
250 result = <span class="marker">df商品一覧[(df商品一覧['単価'] &gt; 200) &amp; (df商品一覧['単価'] &lt; 500)]</span>
251 print(result)
</code></pre>
<p>単価が 200 より大きくて 500 より小さなデータを取り出す<br />
250行目で、条件式を (df商品一覧['単価'] &gt; 200) &amp; (df商品一覧['単価'] &lt; 500) としています。</p>
<pre class="bluerayscode"><code>
253 print("\n*** 単価が 200 より小さいか 400 より大きなデータを取り出す（or条件：| ）***\n")
254 <span class="marker">result = df商品一覧[(df商品一覧['単価'] &lt; 200) | (df商品一覧['単価'] &gt; 400)]</span>
255 print(result)
256 
257 #終了８
258 #sys.exit()
</code></pre>
<p>単価が 200 より小さいか 400 より大きなデータを取り出す<br />
254行目で、条件式を (df商品一覧['単価'] &lt; 200) | (df商品一覧['単価'] &gt; 400) としています。</p>
<p><!--------------------------------></p>
<h3>② 文字条件を指定したデータの絞り込み</h3>
<p>ソースコード <b>#終了８</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品名が３文字以上のデータを取り出す（str.len）***

DataFrame[DataFrame[列名].str.len() &gt;= 3]

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県

*** 商品名の先頭が'み'で始まるデータを取り出す（str.startswith）***

DataFrame[DataFrame[列名].str.startswith('み')]

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山

*** 商品名に'ン'を含むデータを取り出す（str.contains）***

DataFrame[DataFrame[列名].str.contains('ン')]

   商品コード  商品名  単価  産地
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
261 # 商品名が３文字以上のデータを取り出す（str.len）
262 print("\n*** 商品名が３文字以上のデータを取り出す（str.len）***\n")
263 print("DataFrame[DataFrame[列名].str.len() &gt;= 3]\n")
264 <span class="marker">result = df商品一覧[df商品一覧['商品名'].str.len() &gt;= 3]</span>
265 print(result)
</code></pre>
<p>商品名が３文字以上のデータを取り出す<br />
264行目で、条件式を df商品一覧['商品名'].str.len() &gt;= 3 としています。</p>
<pre class="bluerayscode"><code>
267 # 商品名の先頭が"み"で始まるデータを取り出す（str.startswith）
268 print("\n*** 商品名の先頭が'み'で始まるデータを取り出す（str.startswith）***\n")
269 print("DataFrame[DataFrame[列名].str.startswith('み')]\n")
270 <span class="marker">result = df商品一覧[df商品一覧['商品名'].str.startswith('み')]</span>
271 print(result)
</code></pre>
<p>商品名の先頭が"み"で始まるデータを取り出す<br />
270行目で、条件式を df商品一覧['商品名'].str.startswith('み') としています。</p>
<pre class="bluerayscode"><code>
273 # 商品名に"ン"を含むデータを取り出す（str.contains）
274 print("\n*** 商品名に'ン'を含むデータを取り出す（str.contains）***\n")
275 print("DataFrame[DataFrame[列名].str.contains('ン')]\n")
276 <span class="marker">result = df商品一覧[df商品一覧['商品名'].str.contains('ン')]</span>
277 print(result)
278 
279 #終了９
280 #sys.exit()
</code></pre>
<p>商品名に"ン"を含むデータを取り出す<br />
276行目で、条件式を df商品一覧['商品名'].str.contains('ン') としています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．queryを使ったデータの絞り込み</h2>
<p><!--------------------------------></p>
<h3>① 数値条件を指定したデータの絞り込み</h3>
<p>DataFrame.query(条件文字列)を使うと、絞り込み条件を容易かつ直感的に書くことができます。</p>
<p>ソースコード <b>#終了９</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# DataFrame.queryを使ったデータの絞り込み
#

解説：
DataFrame.query(条件文字列)

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県
（行数：5、列数：4）

*** 単価が 200 より大きくて 500 より小さなデータを取り出す（and条件）***

   商品コード  商品名  単価  産地
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県

*** 単価が 200 より大きくて 500 より小さなデータを取り出す（比較演算子の連結）***

   商品コード  商品名  単価  産地
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県

*** 条件文字列の中で変数を使用する ***

   商品コード  商品名  単価  産地
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県
</pre>
<p>&nbsp;<br />
DataFrame.query(条件文字列)</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
300 print("\n*** 単価が 200 より大きくて 500 より小さなデータを取り出す（and条件）***\n")
301 <span class="marker">result = df商品一覧.query('単価 &gt; 200 and 単価 &lt; 500')</span>
302 print(result)
</code></pre>
<p>単価が 200 より大きくて 500 より小さなデータを取り出す（and条件）<br />
301行目で、条件文字列を '単価 &gt; 200 and 単価 &lt; 500' としています。</p>
<pre class="bluerayscode"><code>
304 print("\n*** 単価が 200 より大きくて 500 より小さなデータを取り出す（比較演算子の連結）***\n")
305 <span class="marker">result = df商品一覧.query('200 &lt; 単価 &lt; 500')</span> 
306 print(result) 
</code></pre>
<p>単価が 200 より大きくて 500 より小さなデータを取り出す（比較演算子の連結）<br />
305行目で、条件文字列を '200 &lt; 単価 &lt; 500' としています。<br />
'200 &lt; 単価 and 単価 &lt; 500' と書くのと同じです。</p>
<pre class="bluerayscode"><code>
308 print("\n*** 条件文字列の中で変数を使用する ***\n") 
309 <span class="marker">val = 200</span> 
310 <span class="marker">result = df商品一覧.query('単価 &gt; @val')</span>
311 print(result)
312 
313 #終了10
314 #sys.exit()
</code></pre>
<p>条件文字列の中で変数を使用する<br />
309行目で、変数 val に 200 をセットしています。<br />
310行目のとおり、条件文字列の中で変数 val を使用する場合は、"@" を付けて @val にします。</p>
<p><!--------------------------------></p>
<h3>② 文字条件を指定したデータの絞り込み</h3>
<p>ソースコード <b>#終了10</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品名が３文字以上のデータを取り出す（str.len）***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県

*** 商品名の先頭が'み'で始まるデータを取り出す（str.startswith）***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山

*** 商品名に'ン'を含むデータを取り出す（str.contains）***

   商品コード  商品名  単価  産地
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
</pre>
<p>&nbsp;<br />
DataFrame.query(条件文字列)</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
317 # 商品名が３文字以上のデータを取り出す（str.len）
318 print("\n*** 商品名が３文字以上のデータを取り出す（str.len）***\n")
319 <span class="marker">result = df商品一覧.query('商品名.str.len() &gt;= 3')</span>
320 print(result)
</code></pre>
<p>商品名が３文字以上のデータを取り出す<br />
319行目で、条件文字列を '商品名.str.len() &gt;= 3' としています。</p>
<pre class="bluerayscode"><code>
322 # 商品名の先頭が"み"で始まるデータを取り出す（str.startswith）
323 print("\n*** 商品名の先頭が'み'で始まるデータを取り出す（str.startswith）***\n")
324 <span class="marker">result = df商品一覧.query('商品名.str.startswith("み")')</span>
325 print(result)
</code></pre>
<p>商品名の先頭が"み"で始まるデータを取り出す<br />
324行目で、条件文字列を '商品名.str.startswith("み")' としています。</p>
<pre class="bluerayscode"><code>
327 # 商品名に"ン"を含むデータを取り出す（str.contains）
328 print("\n*** 商品名に'ン'を含むデータを取り出す（str.contains）***\n")
329 <span class="marker">result = df商品一覧.query('商品名.str.contains("ン")')</span>
330 print(result)
331 
332 #終了11
333 #sys.exit()
</code></pre>
<p>商品名に"ン"を含むデータを取り出す<br />
329行目で、条件文字列を '商品名.str.contains("ン")' としています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>６．列の追加</h2>
<p><!--------------------------------></p>
<h3>① 新しい列の追加</h3>
<p>ソースコード <b>#終了11</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 新しい列の追加
#

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県
（行数：5、列数：4）

*** 原価の列を追加 ***

   商品コード  商品名  単価  産地    原価
0  A0001       みかん   100  和歌山    50
1  A0002       メロン   200  茨城県   120
2  A0003       レモン   300  広島県   210
3  A0004       りんご   400  青森県   320
4  A0005       バナナ   500  沖縄県   450
（行数：5、列数：5）

*** 既存の列を使って新しい列を追加 ***

   商品コード  商品名  単価  産地    原価  メッセージ
0  A0001       みかん   100  和歌山    50  みかんは100円です
1  A0002       メロン   200  茨城県   120  メロンは200円です
2  A0003       レモン   300  広島県   210  レモンは300円です
3  A0004       りんご   400  青森県   320  りんごは400円です
4  A0005       バナナ   500  沖縄県   450  バナナは500円です
（行数：5、列数：6）

*** 空の列を追加 ***

   商品コード  商品名  単価  産地    原価  メッセージ         空の列
0  A0001       みかん   100  和歌山    50  みかんは100円です
1  A0002       メロン   200  茨城県   120  メロンは200円です
2  A0003       レモン   300  広島県   210  レモンは300円です
3  A0004       りんご   400  青森県   320  りんごは400円です
4  A0005       バナナ   500  沖縄県   450  バナナは500円です
（行数：5、列数：7）

*** 列名の変更（'空の列'から'備考'へ）***

   商品コード  商品名  単価  産地    原価  メッセージ         備考
0  A0001       みかん   100  和歌山    50  みかんは100円です
1  A0002       メロン   200  茨城県   120  メロンは200円です
2  A0003       レモン   300  広島県   210  レモンは300円です
3  A0004       りんご   400  青森県   320  りんごは400円です
4  A0005       バナナ   500  沖縄県   450  バナナは500円です
（行数：5、列数：7）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
351 # 原価の列を追加
352 print("\n*** 原価の列を追加 ***\n")
353 <span class="marker">df商品一覧['原価'] = [50, 120, 210, 320, 450]</span>
</code></pre>
<p>原価の列を追加<br />
353行目で、原価の列に入れる数値のリスト [50, 120, 210, 320, 450] を使って、新たに 原価 の列を追加しています。</p>
<pre class="bluerayscode"><code>
358 # 既存の列を使って新しい列を追加
359 print("\n*** 既存の列を使って新しい列を追加 ***\n")
360 <span class="marker">df商品一覧['メッセージ'] = (df商品一覧['商品名'] + "は" + df商品一覧['単価'].astype(str) + "円です")</span>
</code></pre>
<p>既存の列を使って新しい列を追加<br />
360行目で、商品名 と 単価 のデータを組み合わせて文字列を作り、その文字列をデータとする メッセージ の列を追加しています。</p>
<pre class="bluerayscode"><code>
365 # 空の列を追加
366 print("\n*** 空の列を追加 ***\n")
367 <span class="marker">df商品一覧['空の列'] = ""</span>
</code></pre>
<p>空の列を追加<br />
367行目で、列名を 空の列、データを空文字で新たな列を追加しています。</p>
<pre class="bluerayscode"><code>
372 # 列名の変更
373 print("\n*** 列名の変更（'空の列'から'備考'へ）***\n")
374 <span class="marker">df商品一覧.rename(columns = {'空の列':'備考'}, inplace = True)</span>
375 

379 #終了12
380 #sys.exit()
</code></pre>
<p>列名の変更<br />
374行目で、rename() を使って、空の列 の列名を 備考 に変更しています。<br />
columns引数に、変更前と変更後の列名を辞書で設定します。<br />
inplace引数に、True を指定すると、列名の変更が反映されます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>７．データの変更</h2>
<p><!--------------------------------></p>
<h3>① データを変更する</h3>
<p>ソースコード <b>#終了12</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# データの変更
#

   商品コード  商品名  単価  産地    原価  メッセージ         備考
0  A0001       みかん   100  和歌山    50  みかんは100円です
1  A0002       メロン   200  茨城県   120  メロンは200円です
2  A0003       レモン   300  広島県   210  レモンは300円です
3  A0004       りんご   400  青森県   320  りんごは400円です
4  A0005       バナナ   500  沖縄県   450  バナナは500円です
（行数：5、列数：7）

*** 備考の列データを変更 ***

   商品コード  商品名  単価  産地    原価  メッセージ         備考
0  A0001       みかん   100  和歌山    50  みかんは100円です  新規商品
1  A0002       メロン   200  茨城県   120  メロンは200円です  在庫なし
2  A0003       レモン   300  広島県   210  レモンは300円です  販売休止
3  A0004       りんご   400  青森県   320  りんごは400円です  入荷未定
4  A0005       バナナ   500  沖縄県   450  バナナは500円です  季節商品
（行数：5、列数：7）

*** インデックス 4 （バナナ）の単価を 600 に変更 ***

   商品コード  商品名  単価  産地    原価  メッセージ         備考
0  A0001       みかん   100  和歌山    50  みかんは100円です  新規商品
1  A0002       メロン   200  茨城県   120  メロンは200円です  在庫なし
2  A0003       レモン   300  広島県   210  レモンは300円です  販売休止
3  A0004       りんご   400  青森県   320  りんごは400円です  入荷未定
4  A0005       バナナ   600  沖縄県   450  バナナは500円です  季節商品
（行数：5、列数：7）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
398 # 備考の列データを変更
399 print("\n*** 備考の列データを変更 ***\n")
400 <span class="marker">df商品一覧['備考'] = ["新規商品", "在庫なし", "販売休止", "入荷未定", "季節商品"]</span>
</code></pre>
<p>備考の列データを変更<br />
400行目で、変更するデータのリストを使って、備考 の列を変更しています。</p>
<pre class="bluerayscode"><code>
405 # インデックス 4 の商品コードを変更
406 print("\n*** インデックス 4 （バナナ）の単価を 600 に変更 ***\n")
407 <span class="marker">df商品一覧.loc[4, '単価'] = 600</span>
408 

412 #終了13
413 #sys.exit()
</code></pre>
<p>インデックス 4 の商品コードを変更<br />
407行目で、loc[行の指定, 列の指定] を使って、行の指定 を インデックス 4、列の指定 を 単価 で変更箇所を設定して、値 600 をセットしています。</p>
<p><!--------------------------------></p>
<h3>② ループ文を使って１行ずつ処理する</h3>
<p>ソースコード <b>#終了13</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** ループ文を使ってメッセージの列データを変更 ***

   商品コード  商品名  単価  産地    原価  メッセージ                備考
0  A0001       みかん   100  和歌山    50  みかんの産地は和歌山です  新規商品
1  A0002       メロン   200  茨城県   120  メロンの産地は茨城県です  在庫なし
2  A0003       レモン   300  広島県   210  レモンの産地は広島県です  販売休止
3  A0004       りんご   400  青森県   320  りんごの産地は青森県です  入荷未定
4  A0005       バナナ   600  沖縄県   450  バナナの産地は沖縄県です  季節商品
（行数：5、列数：7）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
416 # ループ文を使って１行ずつ処理する
417 print("\n*** ループ文を使ってメッセージの列データを変更 ***\n")
418 <span class="marker">for index, data in df商品一覧.iterrows():</span>
419   <span class="marker">str商品名 = data['商品名']</span>
420   <span class="marker">str産地   = data['産地']</span>
421   <span class="marker">df商品一覧.loc[index, 'メッセージ'] = str商品名 + "の産地は" + str産地 + "です"</span>
422 

426 #終了14
427 #sys.exit()
</code></pre>
<p>418行目の for文で、DataFrame（df商品一覧）の行データを１行ずつ処理していきます。<br />
変数index には、インデックスの値、data変数 には１行分のデータが格納されます。<br />
419行目で、商品名のデータを取得しています。<br />
420行目で、産地のデータを取得しています。<br />
421行目で、loc[行の指定, 列の指定] を使って、行の指定 を 変数index、列の指定 を メッセージ で変更箇所を設定して、商品名と産地を組み合わせた文字列をセットしています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>８．DataFrameの結合（横方向）</h2>
<p><!--------------------------------></p>
<h3>① ExcelファイルからDataFrameを作成</h3>
<p>販売実績.xlsx と 商品一覧.xlsx から DataFrameを作成します。</p>
<p>ソースコード <b>#終了14</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">販売実績ファイル名：C:\Python\販売実績.xlsx
      年月  商品コード  数量
0   202511  A0001          8
1   202511  A0002          3
2   202511  A0003          4
3   202511  A0007          2
4   202511  A0010          2
5   202512  A0001          4
6   202512  A0003          2
7   202512  A0004          1
8   202512  A0005          3
9   202512  A0006          5
10  202601  A0008          5
11  202601  A0010          1
12  202601  A0005          4
13  202601  A9999          3
14  202601  A0001          2
（行数：15、列数：3）

商品一覧ファイル名：C:\Python\商品一覧.xlsx
   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900
9  A0010       ライム  1000
（行数：10、列数：4）
</pre>
<p>この２つの DataFrame を横方向に結合していきます。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
441 # 販売実績ファイルの読み込み
442 <span class="marker">filename = dirHome + r"\販売実績.xlsx"</span>
443 print("\n販売実績ファイル名：" + filename)
444 
445 # DataFrameを作成
446 <span class="marker">df販売実績 = pd.read_excel(filename, sheet_name = 'Sheet1', dtype = object)</span>
447 
448 print(df販売実績)
449 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
450 
451 
452 # 商品一覧ファイルの読み込み
453 <span class="marker">filename = dirHome + r"\商品一覧.xlsx"</span>
454 print("\n商品一覧ファイル名：" + filename)
455 
456 # DataFrameを作成
457 <span class="marker">df商品一覧 = pd.read_excel(filename, sheet_name = 'Sheet3', dtype = object)</span>
458 
459 # 欠損値を空文字で埋める
460 <span class="marker">df商品一覧 = df商品一覧.fillna("")</span>
461 
462 print(df商品一覧)
463 print("（行数：" + str(df商品一覧.shape[0]) + "、列数：" + str(df商品一覧.shape[1]) + "）")
464 
465 #終了15
466 #sys.exit()
</code></pre>
<p><!--------------------------------></p>
<h3>② 左外部結合（how = 'left'）</h3>
<p>ソースコード <b>#終了15</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品コードをキーにして左外部結合（how = 'left'）***

      年月  商品コード  数量  商品名  単価  産地
0   202511  A0001          8  みかん   100  和歌山
1   202511  A0002          3  メロン   200  茨城県
2   202511  A0003          4  レモン   300  広島県
3   202511  A0007          2  スイカ   700  熊本県
4   202511  A0010          2  ライム  1000
5   202512  A0001          4  みかん   100  和歌山
6   202512  A0003          2  レモン   300  広島県
7   202512  A0004          1  りんご   400
8   202512  A0005          3  バナナ   500  沖縄県
9   202512  A0006          5  ぶどう   600  千葉県
10  202601  A0008          5  イチゴ   800  栃木県
11  202601  A0010          1  ライム  1000
12  202601  A0005          4  バナナ   500  沖縄県
13  202601  A9999          3  NaN      NaN  NaN
14  202601  A0001          2  みかん   100  和歌山

解説:
販売実績のデータは結合相手の商品一覧に存在しなくても表示されます。（商品コードが A9999 のデータ）
</pre>
<p>販売実績を主として結合します。<br />
販売実績のデータは、結合相手の商品一覧に存在しなくても表示されます。（商品コードが A9999 のデータ）</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
469 # 商品コードをキーにして左外部結合（how = 'left'）
470 print("\n*** 商品コードをキーにして左外部結合（how = 'left'）***\n")
471 <span class="marker">df左結合 = pd.merge(df販売実績, df商品一覧, on = '商品コード', how = 'left')</span>
472 
473 print(df左結合)
474 
475 print("\n解説:")
476 print("販売実績のデータは結合相手の商品一覧に存在しなくても表示されます。（商品コードが A9999 のデータ）")
477 
478 #終了16
479 #sys.exit()
</code></pre>
<p>471行目の merge() を使って、販売実績を主として商品一覧と結合しています。<br />
on引数 に結合のキーとする列名を指定します。</p>
<p><!--------------------------------></p>
<h3>③ 右外部結合（how = 'right'）</h3>
<p>ソースコード <b>#終了16</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品コードをキーにして右外部結合（how = 'right'）***

    商品コード  商品名  単価  産地      年月  数量
0   A0001       みかん   100  和歌山  202511     8
1   A0001       みかん   100  和歌山  202512     4
2   A0001       みかん   100  和歌山  202601     2
3   A0002       メロン   200  茨城県  202511     3
4   A0003       レモン   300  広島県  202511     4
5   A0003       レモン   300  広島県  202512     2
6   A0004       りんご   400          202512     1
7   A0005       バナナ   500  沖縄県  202512     3
8   A0005       バナナ   500  沖縄県  202601     4
9   A0006       ぶどう   600  千葉県  202512     5
10  A0007       スイカ   700  熊本県  202511     2
11  A0008       イチゴ   800  栃木県  202601     5
12  A0009       カシス   900          NaN      NaN
13  A0010       ライム  1000          202511     2
14  A0010       ライム  1000          202601     1

解説:
商品一覧のデータは結合相手の販売実績に存在しなくても表示されます。（商品コードが A0009 のデータ）
</pre>
<p>商品一覧を主として結合します。<br />
商品一覧のデータは、結合相手の販売実績に存在しなくても表示されます。（商品コードが A0009 のデータ）</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
482 # 商品コードをキーにして右外部結合（how = 'right'）
483 print("\n*** 商品コードをキーにして右外部結合（how = 'right'）***\n")
484 <span class="marker">df右結合 = pd.merge(df販売実績, df商品一覧, on = '商品コード', how = 'right')</span>
485 
486 # 列の並べ替え
487 <span class="marker">df右結合 = df右結合[['商品コード','商品名','単価','産地','年月','数量']]</span>
488 
489 print(df右結合)
490 
491 print("\n解説:")
492 print("商品一覧のデータは結合相手の販売実績に存在しなくても表示されます。（商品コードが A0009 のデータ）")
493 
494 #終了17
495 #sys.exit()
</code></pre>
<p>484行目の merge() を使って、商品一覧を主として販売実績と結合しています。<br />
on引数 に結合のキーとする列名を指定します。</p>
<p><!--------------------------------></p>
<h3>④ 完全結合（how = 'outer'）</h3>
<p>ソースコード <b>#終了17</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品コードをキーにして完全結合（how = 'outer'）***

      年月  商品コード  数量  商品名  単価  産地
0   202511  A0001          8  みかん   100  和歌山
1   202512  A0001          4  みかん   100  和歌山
2   202601  A0001          2  みかん   100  和歌山
3   202511  A0002          3  メロン   200  茨城県
4   202511  A0003          4  レモン   300  広島県
5   202512  A0003          2  レモン   300  広島県
6   202512  A0004          1  りんご   400
7   202512  A0005          3  バナナ   500  沖縄県
8   202601  A0005          4  バナナ   500  沖縄県
9   202512  A0006          5  ぶどう   600  千葉県
10  202511  A0007          2  スイカ   700  熊本県
11  202601  A0008          5  イチゴ   800  栃木県
12     NaN  A0009        NaN  カシス   900
13  202511  A0010          2  ライム  1000
14  202601  A0010          1  ライム  1000
15  202601  A9999          3  NaN      NaN  NaN

解説:
販売実績、商品一覧ともに、結合相手が存在しなくても表示されます。
</pre>
<p>販売実績、商品一覧ともに、結合相手が存在しなくても表示されます。</p>
<p>販売実績にあって、商品一覧にないデータ：商品コードが A9999 のデータ<br />
商品一覧にあって、販売実績にないデータ：商品コードが A0009 のデータ</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
498 # 商品コードをキーにして完全結合（how = 'outer'）
499 print("\n*** 商品コードをキーにして完全結合（how = 'outer'）***\n")
500 <span class="marker">df完全結合 = pd.merge(df販売実績, df商品一覧, on = '商品コード', how = 'outer')</span>
501 
502 print(df完全結合)
503 
504 print("\n解説:")
505 print("販売実績、商品一覧ともに、結合相手が存在しなくても表示されます。")
506 
507 #終了18
508 #sys.exit()
</code></pre>
<p>500行目の merge() を使って、商品一覧と販売実績を完全結合しています。<br />
on引数 に結合のキーとする列名を指定します。</p>
<p><!---------------------------------------------------------------------></p>
<h2>９．データの削除</h2>
<p><!--------------------------------></p>
<h3>① 行データの削除</h3>
<p>ソースコード <b>#終了18</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# データの削除
#

      年月  商品コード  数量
0   202511  A0001          8
1   202511  A0002          3
2   202511  A0003          4
3   202511  A0007          2
4   202511  A0010          2
5   202512  A0001          4
6   202512  A0003          2
7   202512  A0004          1
8   202512  A0005          3
9   202512  A0006          5
10  202601  A0008          5
11  202601  A0010          1
12  202601  A0005          4
13  202601  A9999          3
14  202601  A0001          2
（行数：15、列数：3）

*** インデックス 13 の行データを削除 ***

      年月  商品コード  数量
0   202511  A0001          8
1   202511  A0002          3
2   202511  A0003          4
3   202511  A0007          2
4   202511  A0010          2
5   202512  A0001          4
6   202512  A0003          2
7   202512  A0004          1
8   202512  A0005          3
9   202512  A0006          5
10  202601  A0008          5
11  202601  A0010          1
12  202601  A0005          4
14  202601  A0001          2
（行数：14、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
526 # 行データの削除
527 print("\n*** インデックス 13 の行データを削除 ***\n")
528 <span class="marker">df販売実績 = df販売実績.drop(13)</span>
529 

533 #終了19
534 #sys.exit()
</code></pre>
<p>インデックス 13 の行データを削除<br />
528行目で、drop()を使い 引数に インデックス 13 を指定して行データを削除しています。</p>
<p><!--------------------------------></p>
<h3>② 列データの削除</h3>
<p>ソースコード <b>#終了19</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900
9  A0010       ライム  1000
（行数：10、列数：4）

*** 産地の列を削除 ***

   商品コード  商品名  単価
0  A0001       みかん   100
1  A0002       メロン   200
2  A0003       レモン   300
3  A0004       りんご   400
4  A0005       バナナ   500
5  A0006       ぶどう   600
6  A0007       スイカ   700
7  A0008       イチゴ   800
8  A0009       カシス   900
9  A0010       ライム  1000
（行数：14、列数：3）
</pre>
<p>産地の列を削除しました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
537 print("\n")
538 print(df商品一覧)
539 print("（行数：" + str(df商品一覧.shape[0]) + "、列数：" + str(df商品一覧.shape[1]) + "）")
540 
541 # 列データの削除
542 print("\n*** 産地の列を削除 ***\n")
543 <span class="marker">df商品一覧 = df商品一覧.drop('産地', axis = 1)</span>
544 

548 #終了20
549 #sys.exit()
</code></pre>
<p>産地の列を削除<br />
543行目で、drop()を使い 引数に 列名 '産地' を指定して列データを削除しています。<br />
列データを削除するときは、axis = 1 にします。</p>
<p><!---------------------------------------------------------------------></p>
<h2>10．その他のデータ削除の方法</h2>
<p><!--------------------------------></p>
<h3>① 重複データの削除</h3>
<p>ソースコード <b>#終了20</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# その他のデータ削除の方法
#

*** 重複データの削除 ***

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8  ← 重複しているデータ
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
6  202512  A0001          4  ← 重複しているデータ
7  202512  A0002          1
8  202512  A0002          3
9  202512  B0003          5
（行数：10、列数：3）

DataFrame.drop_duplicates()

     年月  商品コード  数量
0  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
9  202512  B0003          5
（行数：8、列数：3）

解説:
年月、商品コード、数量が同じデータが削除されました（インデックス：1, 6）

インデックスを連番に振り直し

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0002          4
2  202511  B0003          2
3  202511  B0004          2
4  202512  A0001          4
5  202512  A0002          1
6  202512  A0002          3
7  202512  B0003          5
（行数：8、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
567 # 重複データの削除
568 print("\n*** 重複データの削除 ***\n")
569 
570 print(df販売実績)
571 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
572 
573 print("\nDataFrame.drop_duplicates()\n")
574 <span class="marker">result = df販売実績.drop_duplicates()</span>
575 
576 print(result)
577 print("（行数：" + str(result.shape[0]) + "、列数：" + str(result.shape[1]) + "）")
578 
579 print("\n解説:")
580 print("年月、商品コード、数量が同じデータが削除されました（インデックス：1, 6）")
581 
582 print("\nインデックスを連番に振り直し\n")
583 <span class="marker">result = result.reset_index(drop = True)</span>
584 

588 #終了21
589 #sys.exit()
</code></pre>
<p>574行目の drop_duplicates() を使って、すべての列のデータ（年月、商品コード、数量）が同じデータ（重複データ）を削除しています。（インデックス：1, 6 のデータ）<br />
583行目の reset_index(drop = True) を使って、インデックスを連番に振り直しています。</p>
<p><!--------------------------------></p>
<h3>② 重複データの削除（列を指定）</h3>
<p>ソースコード <b>#終了21</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 年月と商品コードを指定して重複を削除 ***

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8  ← 年月と商品コードで重複しているデータ
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
6  202512  A0001          4  ← 年月と商品コードで重複しているデータ
7  202512  A0002          1
8  202512  A0002          3  ← 年月と商品コードで重複しているデータ
9  202512  B0003          5
（行数：10、列数：3）

DataFrame.drop_duplicates(subset = 列のリスト, keep)

     年月  商品コード  数量
0  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
7  202512  A0002          1
9  202512  B0003          5
（行数：7、列数：3）

解説:
年月と商品コードで重複を確認するので、数量が異なっていても削除されます。（インデックス：8）
keep = 'first' 重複した最初の行が残ります
keep = 'last'  重複した最後の行が残ります
keep = False   重複しているすべての行が削除されます
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
592 # 重複データの削除（列を指定）
593 print("\n*** 年月と商品コードを指定して重複を削除 ***\n")
594 
595 print(df販売実績)
596 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
597 
598 print("\nDataFrame.drop_duplicates(subset = 列のリスト, keep)\n")
599 <span class="marker">result = df販売実績.drop_duplicates(subset = ['年月', '商品コード'], keep = 'first')</span>
600 

610 #終了22
611 #sys.exit()
</code></pre>
<p>599行目の drop_duplicates() で重複データを削除しています。<br />
subsetパラメータに、列名のリストを設定することで重複を確認する列を指定することができます。<br />
keepパラメータは、以下の通りです。<br />
keep = 'first' 重複した最初の行が残ります<br />
keep = 'last' 重複した最後の行が残ります<br />
keep = False 重複しているすべての行が削除されます</p>
<p><!--------------------------------></p>
<h3>③ 数値条件を指定して削除</h3>
<p>ソースコード <b>#終了22</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 年月が202512のデータを削除 ***

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
9  202512  B0003          5
（行数：10、列数：3）

年月が202512のデータのインデックスを取得
Index([5, 6, 7, 8, 9], dtype='int64')

インデックスを指定して行削除
     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
（行数：5、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
614 # 条件を指定して削除
615 print("\n*** 年月が202512のデータを削除 ***\n")
616 
617 print(df販売実績)
618 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
619 
620 # 年月が202512のデータのインデックスを取得
621 print("\n年月が202512のデータのインデックスを取得")
622 <span class="marker">インデックス = df販売実績.index[df販売実績['年月'] == 202512]</span>
623 print(インデックス)
624 
625 # インデックスを指定して行削除
626 print("\nインデックスを指定して行削除")
627 <span class="marker">result = df販売実績.drop(インデックス)</span>
628 
629 print(result)
630 print("（行数：" + str(result.shape[0]) + "、列数：" + str(result.shape[1]) + "）")
631 
632 #終了23
633 #sys.exit()
</code></pre>
<p>622行目で、年月が 202512 のデータのインデックスを取得しています。 [5, 6, 7, 8, 9]<br />
627行目で、drop() に 取得したインデックスを指定し削除しています。</p>
<p><!--------------------------------></p>
<h3>④ 文字条件を指定して削除</h3>
<p>ソースコード <b>#終了23</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 商品コードの先頭が'B'のデータを削除 ***

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
9  202512  B0003          5
（行数：10、列数：3）

先頭が'B'のデータのインデックスを取得
Index([3, 4, 9], dtype='int64')

インデックスを指定して行削除
     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
（行数：7、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
636 # 条件を指定して削除
637 print("\n*** 商品コードの先頭が'B'のデータを削除 ***\n")
638 
639 print(df販売実績)
640 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
641 
642 print("\n先頭が'B'のデータのインデックスを取得")
643 <span class="marker">インデックス = df販売実績[df販売実績['商品コード'].str.startswith('B')].index</span>
644 print(インデックス)
645 
646 # インデックスを指定して行削除
647 print("\nインデックスを指定して行削除")
648 <span class="marker">result = df販売実績.drop(インデックス)</span>
649 
650 print(result)
651 print("（行数：" + str(result.shape[0]) + "、列数：" + str(result.shape[1]) + "）")
652 
653 #終了24
654 #sys.exit()
</code></pre>
<p>643行目で、商品コード の先頭が 'B' のデータのインデックスを取得しています。 [3, 4, 9]<br />
648行目で、drop() に 取得したインデックスを指定し削除しています。</p>
<p><!--------------------------------></p>
<h3>⑤ 抽出条件式で絞り込んで削除</h3>
<p>ソースコード <b>#終了24</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** DataFrame[抽出条件式]（絞り込み）を使って、商品コードの先頭が'B'のデータを削除 ***

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
9  202512  B0003          5
（行数：10、列数：3）

先頭が'B'のデータで絞り込み　df販売実績[先頭が'B']

     年月  商品コード  数量
3  202511  B0003          2
4  202511  B0004          2
9  202512  B0003          5
（行数：3、列数：3）

先頭が'B'のデータでないもので絞り込み　df販売実績[~先頭が'B']

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
（行数：7、列数：3）

解説:
先頭が'B'ではないデータで絞り込むことで、先頭が'B'のデータを削除したことと同じです。
</pre>
<p>条件の否定形を使って、データを削除します。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
657 # DataFrame[抽出条件式]（絞り込み）で削除
658 print("\n*** DataFrame[抽出条件式]（絞り込み）を使って、商品コードの先頭が'B'のデータを削除 ***\n")
659 
660 print(df販売実績)
661 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
662 
663 # 商品コードの先頭が'B'のデータを抽出条件
664 <span class="marker">sri抽出条件 = df販売実績['商品コード'].str.startswith('B')</span>
665 
666 # 抽出条件で絞り込み
667 print("\n先頭が'B'のデータで絞り込み　df販売実績[先頭が'B']\n")
668 <span class="marker">result = df販売実績[sri抽出条件]</span>
669 
670 print(result)
671 print("（行数：" + str(result.shape[0]) + "、列数：" + str(result.shape[1]) + "）")
672 
673 # 抽出条件でないもので絞り込み（抽出条件の否定で絞り込み）
674 print("\n先頭が'B'のデータでないもので絞り込み　df販売実績[~先頭が'B']\n")
675 <span class="marker">result = df販売実績[~sri抽出条件]</span>  # 『~』抽出条件の否定
676 
677 print(result)
678 print("（行数：" + str(result.shape[0]) + "、列数：" + str(result.shape[1]) + "）")
679 
680 print("\n解説:")
681 print("先頭が'B'ではないデータで絞り込むことで、先頭が'B'のデータを削除したことと同じです。")
682 
683 #終了25
684 #sys.exit()
</code></pre>
<p>664行目で 商品コード の先頭が'B'のデータを抽出して、668行目でDataFrame（df販売実績）を抽出したもので絞り込んでいます。<br />
675行目で 抽出したもの以外（抽出条件の否定形）で絞り込むと、先頭が'B'のデータを削除したことと同じになります。</p>
<p><!--------------------------------></p>
<h3>⑥ ループ文を使って削除</h3>
<p>ソースコード <b>#終了25</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** ループ文を使って'商品コード'の先頭が'B'のデータを削除 ***

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
3  202511  B0003          2
4  202511  B0004          2
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
9  202512  B0003          5
（行数：10、列数：3）

ループ文を使って１行毎に処理する
削除対象インデックス：3
削除対象インデックス：4
削除対象インデックス：9

     年月  商品コード  数量
0  202511  A0001          8
1  202511  A0001          8
2  202511  A0002          4
5  202512  A0001          4
6  202512  A0001          4
7  202512  A0002          1
8  202512  A0002          3
（行数：7、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
687 # ループ文を使って'商品コード'の先頭が'B'のデータを削除
688 print("\n*** ループ文を使って'商品コード'の先頭が'B'のデータを削除 ***\n")
689 
690 print(df販売実績)
691 print("（行数：" + str(df販売実績.shape[0]) + "、列数：" + str(df販売実績.shape[1]) + "）")
692 
693 # データフレームのコピー
694 <span class="marker">df結果 = df販売実績.copy(deep = True)</span>
695 
696 # ループ文を使って１行毎に処理する
697 print("\nループ文を使って１行毎に処理する")
698 <span class="marker">for index, data in df結果.iterrows():</span>
699 <span class="marker">  str商品コード = str(data['商品コード'])</span>
700 <span class="marker">  if str商品コード.startswith('B'):</span>
701 <span class="marker">    print("削除対象インデックス：" + str(index))</span>
702 <span class="marker">    df結果 = df結果.drop(index)</span>
703 
704 print("")
705 print(df結果)
706 print("（行数：" + str(df結果.shape[0]) + "、列数：" + str(df結果.shape[1]) + "）")
707 
708 #終了26
709 #sys.exit()
</code></pre>
<p>694行目で、df販売実績 をコピーして、df結果 を作成しています。<br />
698行目の for文で、DataFrame（df結果）の行データを１行ずつ処理していきます。<br />
変数index には、インデックスの値、data変数 には１行分のデータが格納されます。<br />
699行目で、商品コードのデータを取得しています。<br />
700行目で、商品コード'の先頭が'B'かを判断しています。 変数index が [3, 4, 9]<br />
702行目で、drop()を使い 引数に 変数index を指定して行データを削除しています。</p>
<p><!--------------------------------></p>
<h3>⑦ 全行を削除</h3>
<p>ソースコード <b>#終了26</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">*** 全行を削除 ***

Empty DataFrame
Columns: [年月, 商品コード, 数量]
Index: []
（行数：0、列数：3）
</pre>
<p>&nbsp;</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
712 # 全行を削除
713 print("\n*** 全行を削除 ***\n")
714 <span class="marker">df全行削除 = df販売実績.iloc[:0]</span>
715 
716 print(df全行削除)
717 print("（行数：" + str(df全行削除.shape[0]) + "、列数：" + str(df全行削除.shape[1]) + "）")
718 
719 sys.exit()
</code></pre>
<p>714行目で、iloc[] の行の指定で、ひとつの行も選択しないスライスを指定しています。 iloc[:0]</p>
<table class="footerguide">
<tbody>
<tr>
<td class="fgleft"><a style="text-decoration: none;" href="https://kotablog.pro/python-basic-dataframe/">＜Pandas_DataFrameの基礎</a></td>
<td class="fgcenter">Pandas.DataFrameの利用</td>
<td class="fgright"><a style="text-decoration: none;" href="https://kotablog.pro/python-aggregate-dataframe/">Pandas.DataFrameでデータ集計＞</a></td>
</tr>
</tbody>
</table><p>The post <a href="https://kotablog.pro/python-mastering-dataframe/">Pandas.DataFrameの利用 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pandas.DataFrameの基礎 – 【Pythonプログラミング３ ～Pandas編～】</title>
		<link>https://kotablog.pro/python-basic-dataframe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-basic-dataframe</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Wed, 26 Nov 2025 02:27:57 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1225</guid>

					<description><![CDATA[<p>PandasのDataFrameを扱う方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．演習用プログラムのダウンロード 演習用プログラム（ practice19.py ）、Excelファイ [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-basic-dataframe/">Pandas.DataFrameの基礎 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>PandasのDataFrameを扱う方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice19.py ）、Excelファイル（ 商品一覧.xlsx ）、ＣＳＶファイル（ 追加商品.csv ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice19.py、商品一覧.xlsx、追加商品.csv を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice19-txt/'>practice19.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 9.21 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice19-txt/?wpdmdl=1212&refresh=69d4552f057df1775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsx.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/%e5%95%86%e5%93%81%e4%b8%80%e8%a6%a7-xlsx/'>商品一覧.xlsx</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 14.04 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/%e5%95%86%e5%93%81%e4%b8%80%e8%a6%a7-xlsx/?wpdmdl=1215&refresh=69d4552f05dc61775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/csv.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/%e8%bf%bd%e5%8a%a0%e5%95%86%e5%93%81-csv/'>追加商品.csv</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 0.25 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/%e8%bf%bd%e5%8a%a0%e5%95%86%e5%93%81-csv/?wpdmdl=1216&refresh=69d4552f065531775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>２．ソースコードの表示</h2>
<p>メモ帳を使って、演習用プログラム（ practice19.py ）を開きます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2025/11/notepad-practice19.png" alt="practice19.py" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice19.py</p></div><br />
<!---------------------------------------------------------------------></p>
<h2>３．Pandas と DataFrame について</h2>
<p>Pandas とは、データ解析を容易にする機能を持つPythonのデータ解析ライブラリです。<br />
ＣＳＶファイルや、Excelファイルのような表形式データを扱うときにもとても便利です。<br />
Pandas には２つの主要なデータ構造があり、Series（シリーズ）が１次元のデータ、DataFrame（データフレーム）が２次元のデータに対応します。<br />
本章では、DataFrame について解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>４．DataFrameの作成</h2>
<p><!--------------------------------></p>
<h3>① 直接データを入力した作成</h3>
<p>コマンドプロンプト で practice19.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# DataFrameの作成（直接データを入力した作成）
#

*** データを２次元リストで用意 ***

[['みかん', 100], ['メロン', 200], ['レモン', 300]]

*** 列名をリストで用意 ***

['商品名', '単価']

*** インデックスをリストで用意 ***

['A0001', 'A0002', 'A0003']

*** ２次元リストからDataFrameを作成  pandas.DataFarme ***

       商品名   単価
A0001  みかん  100
A0002  メロン  200
A0003  レモン  300
（行数：3、列数：2）
商品名    object
単価      int64
dtype: object
</pre>
<p>&nbsp;<br />
３つの果物の名前とそれぞれの単価が入った２次元リストと、列名のリスト、インデックスのリストを使って、DataFrameを作成しました。</p>
<table style="border-collapse: collapse; width: 75%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
<td style="width: 25%; background-color: #ccffff;">単価</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
<td style="width: 25%; height: 24px;">100</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
<td style="width: 25%; height: 24px;">200</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
<td style="width: 25%; height: 24px;">300</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
26&emsp;# データを２次元リストで用意
27&emsp;print("\n*** データを２次元リストで用意 ***\n")
28&emsp;<span class="marker">list2D = [['みかん', 100], ['メロン', 200], ['レモン', 300]]</span>
29&emsp;print(list2D)
30&emsp;
31&emsp;# 列名をリストで用意
32&emsp;print("\n*** 列名をリストで用意 ***\n")
33&emsp;<span class="marker">col = ['商品名','単価']</span>
34&emsp;print(col)
35&emsp;
36&emsp;# インデックスをリストで用意
37&emsp;print("\n*** インデックスをリストで用意 ***\n")
38&emsp;<span class="marker">idx = ['A0001','A0002','A0003']</span>
39&emsp;print(idx)
40&emsp;
41&emsp;# DataFrameを作成
42&emsp;print("\n*** ２次元リストからDataFrameを作成  pandas.DataFarme ***\n")
43&emsp;<span class="marker">df商品一覧 = pd.DataFrame(data = list2D, columns = col, index = idx)</span>
44&emsp;

49&emsp;#終了１
50&emsp;#sys.exit()
</code>
</pre>
<p>DataFrameを作成するためにデータが入った２次元リスト、列名のリスト、インデックスのリストを用意します。<br />
28行目で、DataFrameに入れるデータを２次元リストで用意しています。<br />
33行目で、列名をリストで用意しています。<br />
38行目で、インデックスをリストで用意しています。<br />
43行目で、DataFrameを作成しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．ExcelファイルからDataFrameを作成（基本編）</h2>
<p><!--------------------------------></p>
<h3>① Excelファイルから作成</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# ExcelファイルからDataFrameを作成（基本）
#

商品一覧ファイル名：C:\Python\商品一覧.xlsx

*** Excelファイルを読み込んでDataFrameを作成  pandas.read_excel ***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400  青森県
4  A0005       バナナ   500  沖縄県
（行数：5、列数：4）
商品コード  object
商品名      object
単価        int64
産地        object
dtype: object
</pre>
<p>&nbsp;<br />
Excelファイル（商品一覧.xlsx）を読み込んで、５行４列のDataFrameを作成しました。<br />
DataFrame作成時にインデックスを指定していません。よって、インデックスには 0、1、2、3、4 が自動で振られています。</p>
<table style="border-collapse: collapse; width: 75%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">商品名</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
<td style="width: 15%; background-color: #ccffff;">産地</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">みかん</td>
<td style="width: 15%; height: 24px;">100</td>
<td style="width: 15%; height: 24px;">和歌山</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">メロン</td>
<td style="width: 15%; height: 24px;">200</td>
<td style="width: 15%; height: 24px;">茨城県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">レモン</td>
<td style="width: 15%; height: 24px;">300</td>
<td style="width: 15%; height: 24px;">広島県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">りんご</td>
<td style="width: 15%; height: 24px;">400</td>
<td style="width: 15%; height: 24px;">青森県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">バナナ</td>
<td style="width: 15%; height: 24px;">500</td>
<td style="width: 15%; height: 24px;">沖縄県</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
64&emsp;filename = dirHome + r"\商品一覧.xlsx"
65&emsp;print("\n商品一覧ファイル名：" + filename)
66&emsp;
67&emsp;# DataFrameを作成
68&emsp;print("\n*** Excelファイルを読み込んでDataFrameを作成  pandas.read_excel ***\n")
69&emsp;<span class="marker">df商品一覧 = pd.read_excel(filename, sheet_name = 'Sheet1')</span>
70&emsp;

75&emsp;#終了２
76&emsp;#sys.exit()
</code>
</pre>
<p>69行目で、read_excel()を使い、Excelのファイル名とシート名を指定してDataFrame（df商品一覧）を作成しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>６．ExcelファイルからDataFrameを作成（実践編）</h2>
<p><!--------------------------------></p>
<h3>① Excelファイルから作成</h3>
<p>商品一覧.xlsx の Sheet2 を開いてください。<br />
Excelの表が以下の場合について、読み込む方法を解説します。<br />
・表が１行目から始まっていない。<br />
　　→今回は、３行目から始まっている表を読み込みます<br />
・不要な列が含まれている。<br />
　　→今回は、産地、商品コード、商品名、単価の４つの列を読み込みます<br />
・空の行が含まれている。<br />
　　→DataFrameを作成後に、空の行の条件に沿って削除します<br />
・空のセルが含まれている。<br />
　　→空のセルを処理します</p>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# ExcelファイルからDataFrameを作成（実践）
#

商品一覧ファイル名：C:\Python\商品一覧.xlsx

*** Excelファイルを読み込んでDataFrameを作成  pandas.read_excel ***

   産地    商品コード  商品名   単価
0  茨城県  A0002       メロン  200.0
1  沖縄県  A0005       バナナ  500.0
2  和歌山  A0001       みかん  100.0
3  NaN     A0004       りんご  400.0
4  広島県  A0003       レモン  300.0
5  熊本県  NaN         スイカ    NaN
6  NaN     NaN         NaN       NaN
7  NaN     NaN         NaN       NaN
（行数：8、列数：4）
産地        object
商品コード  object
商品名      object
単価        float64
dtype: object

解説:
NaN（Not a Number）は欠損値です。
データが存在しない、または無効であることを示します。
</pre>
<p>&nbsp;<br />
NaN（Not a Number）は欠損値です。データが存在しない、または無効であることを示します。<br />
インデックス 6、7 が空行になります。<br />
インデックス 3、5 に空のセルが含まれています。<br />
単価が 浮動小数点数（float64）になっています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
 92&emsp;# DataFrameを作成
 93&emsp;print("\n*** Excelファイルを読み込んでDataFrameを作成  pandas.read_excel ***\n")
 94&emsp;<span class="marker">df商品一覧 = pd.read_excel(filename,</span>               # Excelファイル名
 95&emsp;                           <span class="marker">sheet_name = 'Sheet2',</span>  # シート名
 96&emsp;                           <span class="marker">header     = 2,</span>         # 見出し（列名）となる行（ゼロ始まり）
 97&emsp;                           <span class="marker">usecols    = ['産地','商品コード','商品名','単価'])</span>  # 読み込む列名
 98&emsp;

107&emsp;#終了３
108&emsp;#sys.exit()
</code>
</pre>
<p>94行目の read_excel() でExcelファイルを読み込んでいます。<br />
95行目で、sheet_name引数 にシート名（Sheet2）を指定しています。<br />
96行目で、header引数 に３行目（ゼロ始まりなので 2 を指定）から読み込むよう指定しています。<br />
97行目で、usecols引数 に読み込む列名のリストを指定しています。</p>
<p><!--------------------------------></p>
<h3>② 空行を削除する</h3>
<p>ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 空行を削除  DataFrame.dropna ***

   産地    商品コード  商品名   単価
0  茨城県  A0002       メロン  200.0
1  沖縄県  A0005       バナナ  500.0
2  和歌山  A0001       みかん  100.0
3  NaN     A0004       りんご  400.0
4  広島県  A0003       レモン  300.0
（行数：5、列数：4）

解説:
商品コード、商品名、単価のいずれかに欠損値(NaN)が含まれる行を削除しました。
</pre>
<p>&nbsp;<br />
空行（条件：商品コード、商品名、単価のいずれかに欠損値(NaN)が含まれる行）を削除しました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
111&emsp;# 空行を削除する
112&emsp;print("\n*** 空行を削除  DataFrame.dropna ***\n")
113&emsp;<span class="marker">df商品一覧 = df商品一覧.dropna(subset = ['商品コード','商品名','単価'])</span>
114&emsp;

121&emsp;#終了４
122&emsp;#sys.exit()
</code>
</pre>
<p>113行目の dropna() で欠損値(NaN)が含まれる行を削除しています。<br />
このとき、subset引数 に列名のリストを指定すると、いずれかに欠損値(NaN)が含まれる行が削除の対象になります。</p>
<p><!--------------------------------></p>
<h3>③ 欠損値を空文字で埋める</h3>
<p>ソースコード <b>#終了４</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 欠損値を空文字で埋める  DataFrame.fillna ***

   産地    商品コード  商品名   単価
0  茨城県  A0002       メロン  200.0
1  沖縄県  A0005       バナナ  500.0
2  和歌山  A0001       みかん  100.0
3          A0004       りんご  400.0
4  広島県  A0003       レモン  300.0
（行数：5、列数：4）
</pre>
<p>&nbsp;<br />
インデックス 3 の産地の欠損値(NaN)を空文字で埋めました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
125&emsp;# 欠損値を空文字で埋める
126&emsp;print("\n*** 欠損値を空文字で埋める  DataFrame.fillna ***\n")
127&emsp;<span class="marker">df商品一覧 = df商品一覧.fillna("")</span>
128&emsp;

132&emsp;#終了５
133&emsp;#sys.exit()
</code>
</pre>
<p>127行目の fillna() の 引数に空文字（""）を指定することで、欠損値(NaN)が空文字に置き換わります。</p>
<p><!--------------------------------></p>
<h3>④ データ型を変更する</h3>
<p>ソースコード <b>#終了５</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 単価のデータ型を整数に変更する  DataFrame.astype ***

   産地    商品コード  商品名  単価
0  茨城県  A0002       メロン   200
1  沖縄県  A0005       バナナ   500
2  和歌山  A0001       みかん   100
3          A0004       りんご   400
4  広島県  A0003       レモン   300
（行数：5、列数：4）
産地       object
商品コード    object
商品名      object
単価        int64
dtype: object
</pre>
<p>&nbsp;<br />
単価を 浮動小数点数（float64）から、整数（int64）に変更しました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
136&emsp;# データ型を変更する
137&emsp;print("\n*** 単価のデータ型を整数に変更する  DataFrame.astype ***\n")
138&emsp;<span class="marker">df商品一覧 = df商品一覧.astype({'単価': int})</span>
139&emsp;

144&emsp;#終了６
145&emsp;#sys.exit()
</code>
</pre>
<p>138行目で astype() の引数に、辞書（データ型を変更したい列名 と 変更後のデータ型）を指定しています。</p>
<p><!--------------------------------></p>
<h3>⑤ 列を並び替える</h3>
<p>ソースコード <b>#終了６</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 列の並び替え ***

   商品コード  商品名  単価  産地
0  A0002       メロン   200  茨城県
1  A0005       バナナ   500  沖縄県
2  A0001       みかん   100  和歌山
3  A0004       りんご   400
4  A0003       レモン   300  広島県
（行数：5、列数：4）
</pre>
<p>&nbsp;<br />
商品コード、商品名、単価、産地 の順で列を並び替えました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
148&emsp;# 列の並び替え
149&emsp;print("\n*** 列の並び替え ***\n")
150&emsp;<span class="marker">df商品一覧 = df商品一覧[['商品コード','商品名','単価','産地']]</span>
151&emsp;

155&emsp;#終了７
156&emsp;#sys.exit()
</code>
</pre>
<p>150行目で、列名のリストを指定することで、そのリストの要素順で列を並び替えることができます。</p>
<p><!--------------------------------></p>
<h3>⑥ 行を並び替える（ソート）</h3>
<p>ソースコード <b>#終了７</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 商品コードでソート ***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
（行数：5、列数：4）
</pre>
<p>&nbsp;<br />
商品コードの昇順で行を並び替えました。（ソート）</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
159&emsp;# 行の並び替え
160&emsp;print("\n*** 商品コードでソート ***\n")
161&emsp;<span class="marker">df商品一覧 = df商品一覧.sort_values('商品コード', ignore_index = True)</span>
162&emsp;

166&emsp;#終了８
167&emsp;#sys.exit()
</code>
</pre>
<p>161行目の、sort_values()を使って、商品コード でソートしています。<br />
ascending引数に、True を指定すると昇順ソート（規定値）、False を指定すると降順ソートになります。<br />
ignore_index引数に、True を指定すると、インデックスがゼロ始まりの連番に振り直されます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>７．ＣＳＶファイルからDataFrameを作成</h2>
<p><!--------------------------------></p>
<h3>① ＣＳＶファイルから作成</h3>
<p>ソースコード <b>#終了８</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# ＣＳＶファイルからDataFrameを作成
#

追加商品ファイル名：C:\Python\追加商品.csv

*** ＣＳＶファイルを読み込んでDataFrameを作成  pandas.read_csv ***

   商品コード  商品名  単価  産地
0  A0006       ぶどう   600  千葉県
1  A0007       スイカ   700  熊本県
2  A0008       イチゴ   800  栃木県
3  A0009       カシス   900  NaN
4  A0010       ライム  1000  NaN
（行数：5、列数：4）
商品コード  object
商品名      object
単価        int64
産地        object
dtype: object
</pre>
<p>&nbsp;<br />
NaN（Not a Number）は欠損値です。データが存在しない、または無効であることを示します。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
181&emsp;filename = dirHome + r"\追加商品.csv"
182&emsp;print("\n追加商品ファイル名：" + filename)
183&emsp;
184&emsp;# DataFrameを作成
185&emsp;print("\n*** ＣＳＶファイルを読み込んでDataFrameを作成  pandas.read_csv ***\n")
186&emsp;<span class="marker">df追加商品 = pd.read_csv(filename,</span>      # ＣＳＶファイル名
187&emsp;                         <span class="marker">header   = 1,</span>  # 見出し（列名）となる行（ゼロ始まり）
188&emsp;                         <span class="marker">usecols  = ['産地','商品コード','商品名','単価'],</span>  # 読み込む列名
189&emsp;                         <span class="marker">encoding = 'cp932')</span>  # 文字コード
190&emsp;

195&emsp;#終了９
196&emsp;#sys.exit()
</code>
</pre>
<p>186行目の read_csv() でＣＳＶファイルを読み込んでいます。<br />
187行目で、header引数 に２行目（ゼロ始まりなので 1 を指定）から読み込むよう指定しています。<br />
188行目で、usecols引数 に読み込む列名のリストを指定しています。<br />
189行目で、encoding引数 に読み込むＣＳＶファイルの文字コードを指定しています。（'cp932'、'utf-8' 等）</p>
<p><!--------------------------------></p>
<h3>② 欠損値を文字'不明'で埋める</h3>
<p>ソースコード <b>#終了９</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 欠損値を文字'不明'で埋める  DataFrame.fillna ***

   商品コード  商品名  単価  産地
0  A0006       ぶどう   600  千葉県
1  A0007       スイカ   700  熊本県
2  A0008       イチゴ   800  栃木県
3  A0009       カシス   900  不明
4  A0010       ライム  1000  不明
（行数：5、列数：4）
</pre>
<p>&nbsp;<br />
インデックス 3 と 4 の産地の欠損値(NaN)を 不明 の文字で埋めました。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
199&emsp;# 欠損値を文字'不明'で埋める
200&emsp;print("\n*** 欠損値を文字'不明'で埋める  DataFrame.fillna ***\n")
201&emsp;<span class="marker">df追加商品 = df追加商品.fillna("不明")</span>
202&emsp;

206&emsp;#終了10
207&emsp;#sys.exit()
</code>
</pre>
<p>201行目の fillna() の引数に文字列を指定することで、欠損値(NaN)をその文字列で埋めることができます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>８．DataFrameの結合（縦方向）</h2>
<p><!--------------------------------></p>
<h3>① ２つのDataFrameの結合（縦方向）</h3>
<p>商品一覧.xlsx から作成したDataFrameと、追加商品.csv から作成したDataFrameを結合します。</p>
<p>ソースコード <b>#終了10</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# ２つのDataFrameの結合（縦方向）
#

*** DataFrameを結合（縦方向）  pandas.concat ***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900  不明
9  A0010       ライム  1000  不明
（行数：10、列数：4）
</pre>
<p>&nbsp;<br />
商品一覧.xlsx から作成したDataFrameの末尾に、追加商品.csv から作成したDataFrameが結合しています。</p>
<table style="border-collapse: collapse; width: 75%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 75%; background-color: #f5f5f5;" colspan="5">商品一覧</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">商品名</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
<td style="width: 15%; background-color: #ccffff;">産地</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">みかん</td>
<td style="width: 15%; height: 24px;">100</td>
<td style="width: 15%; height: 24px;">和歌山</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">メロン</td>
<td style="width: 15%; height: 24px;">200</td>
<td style="width: 15%; height: 24px;">茨城県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">レモン</td>
<td style="width: 15%; height: 24px;">300</td>
<td style="width: 15%; height: 24px;">広島県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">りんご</td>
<td style="width: 15%; height: 24px;">400</td>
<td style="width: 15%; height: 24px;"></td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">バナナ</td>
<td style="width: 15%; height: 24px;">500</td>
<td style="width: 15%; height: 24px;">沖縄県</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 75%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 75%; background-color: #f5f5f5;" colspan="5">追加商品</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">商品名</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
<td style="width: 15%; background-color: #ccffff;">産地</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0006</td>
<td style="width: 15%; height: 24px;">ぶどう</td>
<td style="width: 15%; height: 24px;">600</td>
<td style="width: 15%; height: 24px;">千葉県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0007</td>
<td style="width: 15%; height: 24px;">スイカ</td>
<td style="width: 15%; height: 24px;">700</td>
<td style="width: 15%; height: 24px;">熊本県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0008</td>
<td style="width: 15%; height: 24px;">イチゴ</td>
<td style="width: 15%; height: 24px;">800</td>
<td style="width: 15%; height: 24px;">栃木県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0009</td>
<td style="width: 15%; height: 24px;">カシス</td>
<td style="width: 15%; height: 24px;">900</td>
<td style="width: 15%; height: 24px;">不明</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0010</td>
<td style="width: 15%; height: 24px;">ライム</td>
<td style="width: 15%; height: 24px;">1000</td>
<td style="width: 15%; height: 24px;">不明</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 75%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 75%; background-color: #f5f5f5;" colspan="5">DataFrameを結合（縦方向）</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 15%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 15%; background-color: #ccffff;">商品コード</td>
<td style="width: 15%; background-color: #ccffff;">商品名</td>
<td style="width: 15%; background-color: #ccffff;">単価</td>
<td style="width: 15%; background-color: #ccffff;">産地</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">0</td>
<td style="width: 15%; height: 24px;">A0001</td>
<td style="width: 15%; height: 24px;">みかん</td>
<td style="width: 15%; height: 24px;">100</td>
<td style="width: 15%; height: 24px;">和歌山</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">1</td>
<td style="width: 15%; height: 24px;">A0002</td>
<td style="width: 15%; height: 24px;">メロン</td>
<td style="width: 15%; height: 24px;">200</td>
<td style="width: 15%; height: 24px;">茨城県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">2</td>
<td style="width: 15%; height: 24px;">A0003</td>
<td style="width: 15%; height: 24px;">レモン</td>
<td style="width: 15%; height: 24px;">300</td>
<td style="width: 15%; height: 24px;">広島県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">3</td>
<td style="width: 15%; height: 24px;">A0004</td>
<td style="width: 15%; height: 24px;">りんご</td>
<td style="width: 15%; height: 24px;">400</td>
<td style="width: 15%; height: 24px;"></td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">4</td>
<td style="width: 15%; height: 24px;">A0005</td>
<td style="width: 15%; height: 24px;">バナナ</td>
<td style="width: 15%; height: 24px;">500</td>
<td style="width: 15%; height: 24px;">沖縄県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">5</td>
<td style="width: 15%; height: 24px;">A0006</td>
<td style="width: 15%; height: 24px;">ぶどう</td>
<td style="width: 15%; height: 24px;">600</td>
<td style="width: 15%; height: 24px;">千葉県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">6</td>
<td style="width: 15%; height: 24px;">A0007</td>
<td style="width: 15%; height: 24px;">スイカ</td>
<td style="width: 15%; height: 24px;">700</td>
<td style="width: 15%; height: 24px;">熊本県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">7</td>
<td style="width: 15%; height: 24px;">A0008</td>
<td style="width: 15%; height: 24px;">イチゴ</td>
<td style="width: 15%; height: 24px;">800</td>
<td style="width: 15%; height: 24px;">栃木県</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">8</td>
<td style="width: 15%; height: 24px;">A0009</td>
<td style="width: 15%; height: 24px;">カシス</td>
<td style="width: 15%; height: 24px;">900</td>
<td style="width: 15%; height: 24px;">不明</td>
</tr>
<tr style="height: 24px;">
<td style="width: 15%; height: 24px;">9</td>
<td style="width: 15%; height: 24px;">A0010</td>
<td style="width: 15%; height: 24px;">ライム</td>
<td style="width: 15%; height: 24px;">1000</td>
<td style="width: 15%; height: 24px;">不明</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
221&emsp;# DataFrameを結合（縦方向）
222&emsp;print("\n*** DataFrameを結合（縦方向）  pandas.concat ***\n")
223&emsp;<span class="marker">df商品一覧 = pd.concat([df商品一覧, df追加商品], ignore_index = True)</span>
224&emsp;

228&emsp;#終了11
229&emsp;#sys.exit()
</code>
</pre>
<p>223行目の、concat() の引数に結合したいDataFrameのリストを指定しています。<br />
ignore_index引数に、True を指定すると、インデックスがゼロ始まりの連番に振り直されます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>９．DataFrameをファイルへ出力</h2>
<p><!--------------------------------></p>
<h3>① Excelファイルに出力</h3>
<p>ソースコード <b>#終了11</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# DataFrameをExcelファイルに出力
#

Excelファイル名：C:\Python\Excel出力.xlsx

*** Excelファイルに出力  DataFrame.ExcelWriter ***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900  不明
9  A0010       ライム  1000  不明
</pre>
<p>&nbsp;<br />
作成されたExcelファイル（Excel出力.xlsx）を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
243&emsp;filename = dirHome + r"\Excel出力.xlsx"
244&emsp;print("\nExcelファイル名：" + filename)
245&emsp;
246&emsp;# Excelファイルに出力
247&emsp;print("\n*** Excelファイルに出力  DataFrame.ExcelWriter ***\n")
248&emsp;print(df商品一覧)
249&emsp;<span class="marker">with pd.ExcelWriter(filename,</span> 
250&emsp;                    <span class="marker">mode   = 'w',</span>               # 書き込みモード
251&emsp;                    <span class="marker">engine = 'openpyxl'</span>         # 書き込みにopenpyxlを使用
252&emsp;                   ) as writer:
253&emsp;  df商品一覧.to_excel(writer, 
254&emsp;                      <span class="marker">sheet_name = '商品一覧',</span>  # シート名
255&emsp;                      <span class="marker">index      = False)</span>       # インデックスを出力しない
256&emsp;
257&emsp;#終了12
258&emsp;#sys.exit()
</code>
</pre>
<p>249行目の ExcelWriter() と、253行目の to_excel() を使ってExcelファイルに出力しています。<br />
250行目の mode引数 に 'w' を指定することで書き込みモード（上書き）にしています。<br />
251行目の engine引数 では、Excelファイル出力を openpyxl ライブラリを使用。<br />
254行目の sheet_name引数 で、シート名を付けています。<br />
255行目の index引数 を False にすることで、インデックス部分（0、1、2、… 、8、9）をExcelファイルに出力しないようにしています。</p>
<p><!--------------------------------></p>
<h3>② ＣＳＶファイルに出力</h3>
<p>ソースコード <b>#終了12</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
#
# DataFrameをＣＳＶファイルに出力
#

ＣＳＶファイル名：C:\Python\CSV出力.csv

*** ＣＳＶファイルに出力  DataFrame.to_csv ***

   商品コード  商品名  単価  産地
0  A0001       みかん   100  和歌山
1  A0002       メロン   200  茨城県
2  A0003       レモン   300  広島県
3  A0004       りんご   400
4  A0005       バナナ   500  沖縄県
5  A0006       ぶどう   600  千葉県
6  A0007       スイカ   700  熊本県
7  A0008       イチゴ   800  栃木県
8  A0009       カシス   900  不明
9  A0010       ライム  1000  不明
</pre>
<p>&nbsp;<br />
作成されたＣＳＶファイル（CSV出力.csv）をメモ帳などのテキストエディタで開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
272&emsp;filename = dirHome + r"\CSV出力.csv"
273&emsp;print("\nＣＳＶファイル名：" + filename)
274&emsp;
275&emsp;# ＣＳＶファイルに出力
276&emsp;print("\n*** ＣＳＶファイルに出力  DataFrame.to_csv ***\n")
277&emsp;print(df商品一覧)
278&emsp;<span class="marker">df商品一覧.to_csv(filename,</span> 
279&emsp;                  <span class="marker">mode     = 'w',</span>      # 書き込みモード
280&emsp;                  <span class="marker">index    = False,</span>    # インデックスを出力しない
281&emsp;                  <span class="marker">encoding = 'cp932',</span>  # 文字コード
282&emsp;                  <span class="marker">quoting  = csv.QUOTE_NONNUMERIC)</span>  # 数値でない要素を引用符で囲む
283&emsp;
284&emsp;sys.exit()
</code>
</pre>
<p>278行目の to_csv() を使ってＣＳＶファイルに出力します。<br />
279行目の mode引数 に 'w' を指定することで書き込みモード（上書き）にしています。<br />
280行目の index引数 を False にすることで、インデックス部分（0、1、2、… 、8、9）をＣＳＶファイルに出力しないようにしています。<br />
281行目で、encoding引数 に出力するＣＳＶファイルの文字コードを指定しています。（'cp932'、'utf-8' 等）<br />
282行目の quoting引数 の設定は以下の通りです。<br />
・quoting = csv.QUOTE_ALL　：　すべての要素が引用符で囲まれる。<br />
・quoting = csv.QUOTE_NONNUMERIC　：　数値でない要素が引用符で囲まれる。<br />
&nbsp;</p>
<table class="footerguide">
<tr>
<td class="fgleft">
<a style="text-decoration: none;" href="https://kotablog.pro/python-basic-series/">＜Pandas.Seriesの基礎</a>
</td>
<td class="fgcenter">
Pandas_DataFrameの基礎
</td>
<td class="fgright">
<a style="text-decoration: none;" href="https://kotablog.pro/python-mastering-dataframe/">Pandas.DataFrameの利用＞</a>
</td>
</tr>
</table><p>The post <a href="https://kotablog.pro/python-basic-dataframe/">Pandas.DataFrameの基礎 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pandas.Seriesの基礎 – 【Pythonプログラミング３ ～Pandas編～】</title>
		<link>https://kotablog.pro/python-basic-series/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-basic-series</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Wed, 26 Nov 2025 02:23:38 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PROGRAMMING]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1222</guid>

					<description><![CDATA[<p>PandasのSeriesを扱う方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．演習用プログラムのダウンロード 演習用プログラム（ practice18.py ）をダウンロードします。  [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-basic-series/">Pandas.Seriesの基礎 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>PandasのSeriesを扱う方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice18.py ）をダウンロードします。<br />
ダウンロードファイルは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice18.py を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice18-txt/'>practice18.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 11.80 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice18-txt/?wpdmdl=1211&refresh=69d4552f0ae951775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>２．ソースコードの表示</h2>
<p>メモ帳を使って、演習用プログラム（ practice18.py ）を開きます。</p>
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" class="size-medium wp-image-543" src="https://kotablog.pro/wp-content/uploads/2025/11/notepad-practice18.png" alt="practice18.py" width="800" height="600" /><p id="caption-attachment-543" class="wp-caption-text">practice18.py</p></div>
<p><!---------------------------------------------------------------------></p>
<h2>３．Pandas と Series について</h2>
<p>Pandas とは、データ解析を容易にする機能を持つPythonのデータ解析ライブラリです。<br />
ＣＳＶファイルや、Excelファイルのような表形式データを扱うときにもとても便利です。<br />
Pandas には２つの主要なデータ構造があり、Series（シリーズ）が１次元のデータ、DataFrame（データフレーム）が２次元のデータに対応します。<br />
本章では、Series について解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>４．Seriesの作成</h2>
<p><!--------------------------------></p>
<h3>① リストからSeriesを作成（インデックスの指定なし）</h3>
<p>コマンドプロンプト で practice18.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# リストからSeriesを作成（インデックスの指定なし）
#

*** データをリストで用意 ***

['レモン', 'マスカット', 'メロン', 'マンゴー', 'みかん']

*** リストからSeriesを作成  pandas.Series(data引数) ***

0      レモン
1    マスカット
2      メロン
3     マンゴー
4      みかん
dtype: object
データの数：5
&lt;class 'pandas.core.series.Series'&gt;

解説:
左端に表示された 0、1、2、3、4 の数値がインデックスです。
今回のようにインデックスの指定がないとゼロから始まる連番の数値が自動設定されます。
</pre>
<p>５つの果物の名前（レモン、マスカット、メロン、マンゴー、みかん）が入ったリストを使って、Seriesを作成しました。</p>
<p>左端に表示された 0、1、2、3、4 の数値がインデックスになります。<br />
今回はSeriesを作成するときにインデックスを指定していないので、ゼロから始まる連番が自動で付けられます。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #d9d9d9;"></td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">0</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">1</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">2</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">3</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">4</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
25 # リストを用意
26 print("\n*** データをリストで用意 ***\n")
27 <span class="marker">list1 = ['レモン','マスカット','メロン','マンゴー','みかん']</span>
28 print(list1)
29 
30 # リストからSeriesを作成
31 print("\n*** リストからSeriesを作成  pandas.Series(data引数) ***\n")
32 <span class="marker">sri1 = pd.Series(data = list1)</span>
33 

42 #終了１
43 sys.exit()
</code></pre>
<p>27行目で、Seriesに入れるデータをリストで用意しています。<br />
32行目で、dataパラメータにデータの入ったリストを指定してSeriesを作成しています。</p>
<p><!--------------------------------></p>
<h3>② リストからSeriesを作成（インデックスの指定あり）</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# リストからSeriesを作成（インデックスの指定あり）
#

*** データをリストで用意 ***

['レモン', 'マスカット', 'メロン', 'マンゴー', 'みかん']

*** インデックスをリストで用意 ***

['A0003', 'A0006', 'A0002', 'A0004', 'A0001']

*** リストからSeriesを作成  pandas.Series(data引数, index引数) ***

A0003      レモン
A0006    マスカット
A0002      メロン
A0004     マンゴー
A0001      みかん
dtype: object
データの数：5
&lt;class 'pandas.core.series.Series'&gt;

解説:
インデックスの部分が、リストで用意したインデックスになっています。
</pre>
<p>今回は、５つのインデックス [A0003、A0006、A0002、A0004、A0001] が入ったリストも使って、Seriesを作成しました。<br />
インデックスの部分が、リストで用意したインデックスになりました。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #d9d9d9;"></td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
57 # リストを用意
58 print("\n*** データをリストで用意 ***\n")
59 list1 = ['レモン','マスカット','メロン','マンゴー','みかん']
60 print(list1)
61 
62 # インデックスをリストで用意
63 print("\n*** インデックスをリストで用意 ***\n")
64 <span class="marker">idx = ['A0003','A0006','A0002','A0004','A0001']</span>
65 print(idx)
66 
67 # Seriesを作成
68 print("\n*** リストからSeriesを作成  pandas.Series(data引数, index引数) ***\n")
69 <span class="marker">sri2 = pd.Series(data = list1, index = idx)</span>
70 

78 #終了２
79 sys.exit()
</code></pre>
<p>64行目で、インデックスをリストで用意しています。<br />
69行目で、dataパラメータにデータの入ったリスト、indexパラメータにインデックスの入ったリストを指定してSeriesを作成しています。</p>
<p><!--------------------------------></p>
<h3>③ 辞書からSeriesを作成</h3>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# 辞書からSeriesを作成
#

*** データを辞書で用意
{'札幌': 1952000, '東京': 9821798, '大阪': 2691000}

*** 辞書からSeriesを作成  pandas.Series(data引数) ***

札幌    1952000
東京    9821798
大阪    2691000
dtype: int64
データの数：3
&lt;class 'pandas.core.series.Series'&gt;

解説:
辞書のキー部分（県庁所在地）がインデックスになります。
</pre>
<p>辞書からSeriesを作成しています。<br />
辞書のキー部分（県庁所在地）がインデックスになります。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #d9d9d9;"></td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">札幌</td>
<td style="width: 25%; height: 24px;">1952000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">東京</td>
<td style="width: 25%; height: 24px;">9821798</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">大阪</td>
<td style="width: 25%; height: 24px;">2691000</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
 93 # 辞書を用意
 94 print("\n*** データを辞書で用意")
 95 <span class="marker">dict1 = {'札幌' : 1952000, '東京' : 9821798, '大阪' : 2691000}</span>
 96 print(dict1)
 97 
 98 # Seriesを作成
 99 print("\n*** 辞書からSeriesを作成  pandas.Series(data引数) ***\n")
100 <span class="marker">sri3 = pd.Series(data = dict1)</span>
101 

109 #終了３
110 sys.exit()
</code></pre>
<p>95行目で、Seriesに入れるデータを辞書で用意しています。<br />
100行目で、dataパラメータにデータの入った辞書を指定してSeriesを作成しています。</p>
<p><!--------------------------------></p>
<h3>④ Seriesにカラム名をつける</h3>
<p>カラム名とは、データの列につける名前のことです。</p>
<p>ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesにカラム名をつける
#

*** カラム名を '商品名' にしてSeriesを作成  pandas.Series(data引数, index引数, name引数) ***

A0003      レモン
A0006    マスカット
A0002      メロン
A0004     マンゴー
A0001      みかん
Name: 商品名, dtype: object

*** 作成済みのSeriesにカラム名をつける ***

カラム名をつける前の状態
札幌    1952000
東京    9821798
大阪    2691000
dtype: int64

カラム名 '人口' をつける  Series.rename('人口')
札幌    1952000
東京    9821798
大阪    2691000
Name: 人口, dtype: int64
</pre>
<p>Seriesを作成するときにカラム名をつける方法と、既存のSeriesにカラム名をつける方法があります。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">人口</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">札幌</td>
<td style="width: 25%; height: 24px;">1952000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">東京</td>
<td style="width: 25%; height: 24px;">9821798</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">大阪</td>
<td style="width: 25%; height: 24px;">2691000</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
124 # Seriesを作成
125 print("\n*** カラム名を '商品名' にしてSeriesを作成  pandas.Series(data引数, index引数, name引数) ***\n")
126 <span class="marker">sri2 = pd.Series(data = list1, index = idx, name = '商品名')</span>
127 print(sri2)
128 
129 # 作成済みのSeriesにカラム名をつける
130 print("\n*** 作成済みのSeriesにカラム名をつける ***")
131 
132 print("\nカラム名をつける前の状態")
133 print(sri3)
134 
135 print("\nカラム名 '人口' をつける  Series.rename('人口')")
136 <span class="marker">sri3 = sri3.rename('人口')</span>
137 print(sri3)
138 
139 #終了４
140 sys.exit()
</code></pre>
<p>126行目で、Seriesを作成するときに name引数を指定することでカラム名を設定しています。<br />
136行目で、作成済のSeriesにカラム名を設定しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．Seriesのソート</h2>
<p><!--------------------------------></p>
<h3>① 要素でソート</h3>
<p>ソースコード <b>#終了４</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesのソート（要素でソート）
#

ソート前の状態
札幌    1952000
東京    9821798
大阪    2691000
Name: 人口, dtype: int64

*** 人口を昇順でソート ***  Series.sort_values()
札幌    1952000
大阪    2691000
東京    9821798
Name: 人口, dtype: int64

*** 人口を降順でソート ***  Series.sort_values(ascending = False)
東京    9821798
大阪    2691000
札幌    1952000
Name: 人口, dtype: int64
</pre>
<p>Seriesの要素（データ部分）でソート（並べ替え）しています。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">ソート前の状態</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">人口</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">札幌</td>
<td style="width: 25%; height: 24px;">1952000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">東京</td>
<td style="width: 25%; height: 24px;">9821798</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">大阪</td>
<td style="width: 25%; height: 24px;">2691000</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">人口を昇順でソート</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">人口</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">札幌</td>
<td style="width: 25%; height: 24px;">1952000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">大阪</td>
<td style="width: 25%; height: 24px;">2691000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">東京</td>
<td style="width: 25%; height: 24px;">9821798</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">人口を降順でソート</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">人口</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">東京</td>
<td style="width: 25%; height: 24px;">9821798</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">大阪</td>
<td style="width: 25%; height: 24px;">2691000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">札幌</td>
<td style="width: 25%; height: 24px;">1952000</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
157 print("\n*** 人口を昇順でソート ***  Series.sort_values()")
158 <span class="marker">result = sri3.sort_values()</span>
159 print(result)
160 
161 print("\n*** 人口を降順でソート ***  Series.sort_values(ascending = False)")
162 <span class="marker">result = sri3.sort_values(ascending = False)</span>
163 print(result)
164 
165 #終了５
166 sys.exit()
</code></pre>
<p>158行目で、sort_values()を使って要素（人口のデータ）を昇順でソートしています。<br />
162行目で、降順でソートしています。降順のときは、sort_values(ascending = False)とします。</p>
<p><!--------------------------------></p>
<h3>② インデックスでソート</h3>
<p>ソースコード <b>#終了５</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesをソートする（インデックスでソート）
#

ソート前の状態
A0003      レモン
A0006    マスカット
A0002      メロン
A0004     マンゴー
A0001      みかん
Name: 商品名, dtype: object

*** 昇順でソート ***  Series.sort_index()
A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

*** 降順でソート ***  Series.sort_index(ascending = False)
A0006    マスカット
A0004     マンゴー
A0003      レモン
A0002      メロン
A0001      みかん
Name: 商品名, dtype: object
</pre>
<p>Seriesのインデックス部分でソート（並べ替え）しています。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">ソート前の状態</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">インデックスを昇順でソート</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">インデックスを降順でソート</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
183 print("\n*** 昇順でソート ***  Series.sort_index()")
184 <span class="marker">result = sri2.sort_index()</span>
185 print(result)
186 
187 print("\n*** 降順でソート ***  Series.sort_index(ascending = False)")
188 <span class="marker">result = sri2.sort_index(ascending = False)</span>
189 print(result)
190 
191 #終了６
192 sys.exit()
</code></pre>
<p>184行目で、sort_index()を使ってインデックスを昇順でソートしています。<br />
188行目で、降順でソートしています。降順のときは、sort_index(ascending = False)とします。</p>
<p><!---------------------------------------------------------------------></p>
<h2>６．Seriesからデータを取り出す</h2>
<p><!--------------------------------></p>
<h3>① インデックスを使って取り出す（loc）</h3>
<p>ソースコード <b>#終了６</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesからデータを取り出す（インデックスを使用）
#

インデックスでソート（昇順）しておきます
A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

インデックスを使って取り出す（loc）

*** A0001 のデータを取り出す ***
loc['A0001']

みかん
&lt;class 'str'&gt;

*** スライスを使い A0001 から A0003 のデータを取り出す ***
loc['A0001':'A0003']

A0001    みかん
A0002    メロン
A0003    レモン
Name: 商品名, dtype: object
&lt;class 'pandas.core.series.Series'&gt;

*** リストを使い A0001 と A0006 のデータを取り出す ***
loc[['A0001','A0006']]

A0001      みかん
A0006    マスカット
Name: 商品名, dtype: object
&lt;class 'pandas.core.series.Series'&gt;
</pre>
<p>インデックスを使ってSeriesからデータを取り出す場合は loc を使います。<br />
ひとつ、もしくは複数のデータを取り出すことができます。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">インデックスでソート（昇順）しておきます</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
214 # A0001 のデータを取り出す
215 print("\n*** A0001 のデータを取り出す ***")
216 print("loc['A0001']\n")
217 <span class="marker">result = sri2.loc['A0001']</span>
218 print(result)
219 print(type(result))
220 
221 # スライスを使い A0001 から A0003 のデータを取り出す
222 print("\n*** スライスを使い A0001 から A0003 のデータを取り出す ***")
223 print("loc['A0001':'A0003']\n")
224 <span class="marker">result = sri2.loc['A0001':'A0003']</span>
225 print(result)
226 print(type(result))
227 
228 # リストを使い A0001 と A0006 のデータを取り出す
229 print("\n*** リストを使い A0001 と A0006 のデータを取り出す ***")
230 print("loc[['A0001','A0006']]\n")
231 <span class="marker">result = sri2.loc[['A0001','A0006']]</span>
232 print(result)
233 print(type(result))
234 
235 #終了７
236 sys.exit()
</code></pre>
<p>217行目は、ひとつのインデックス（A0001）を使ってひとつのデータを取り出しています。<br />
224行目は、スライスを使いインデックスの範囲を指定してデータを取り出しています。<br />
231行目は、インデックスのリスト['A0001','A0006']を使って複数のデータを取り出しています。</p>
<p><!--------------------------------></p>
<h3>② 要素の連番を使って取り出す（iloc）</h3>
<p>ソースコード <b>#終了７</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesからデータを取り出す（要素の連番を使用）
#

A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

要素の連番（ゼロ始まり）を使って取り出す（iloc）

*** 連番 0 のデータを取り出す ***
iloc[0]

みかん
&lt;class 'str'&gt;

*** 連番 1 から 3 のデータ（スライス表記で指定）***
iloc[1:4]

A0002     メロン
A0003     レモン
A0004    マンゴー
Name: 商品名, dtype: object
&lt;class 'pandas.core.series.Series'&gt;

*** 繰り返し文（for）を使いすべてのデータを取り出す ***

みかん
メロン
レモン
マンゴー
マスカット
</pre>
<p>要素（データ）にはゼロから始まる連番がついています。<br />
この連番を使ってSeriesからデータを取り出す場合は iloc を使います。<br />
ひとつ、もしくは複数のデータを取り出すことができます。</p>
<table style="border-collapse: collapse; width: 75%; height: 120px;">
<thead>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #ffccff;">要素の連番（セロ始まり）</td>
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">0</td>
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">1</td>
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">2</td>
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">3</td>
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">4</td>
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
256 # 連番 0 のデータを取り出す
257 print("\n*** 連番 0 のデータを取り出す ***")
258 print("iloc[0]\n")
259 <span class="marker">result = sri2.iloc[0]</span>
260 print(result)
261 print(type(result))
262 
263 # スライスを使い 連番 1 から 3 のデータを取り出す
264 print("\n*** 連番 1 から 3 のデータ（スライス表記で指定）***")
265 print("iloc[1:4]\n")
266 <span class="marker">result = sri2.iloc[1:4]</span>
267 print(result)
268 print(type(result))
269 
270 # 繰り返し文（for）を使いすべてのデータを取り出す
271 print("\n*** 繰り返し文（for）を使いすべてのデータを取り出す ***\n")
272 <span class="marker">for i in range(len(sri2)):</span>
273 <span class="marker">  data = sri2.iloc[i]</span>
274 <span class="marker">  print(data)</span>
275 
276 #終了８
277 sys.exit()
</code></pre>
<p>259行目で、連番 0 のデータを取り出しています。<br />
266行目で、スライスを使って 連番 1 から 3 のデータを取り出しています。<br />
272行目から274行目では、ループ文と組み合わせてSeries内のデータをすべて取り出しています。</p>
<p><!--------------------------------></p>
<h3>③ 条件を指定して取り出す</h3>
<p>ソースコード <b>#終了８</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesからデータを取り出す（条件を指定）
#

抽出元のSeries
札幌    1952000
東京    9821798
大阪    2691000
Name: 人口, dtype: int64

*** 2,000,000以上のデータを取り出す ***
Series[Series &gt;= 2000000]

東京    9821798
大阪    2691000
Name: 人口, dtype: int64


抽出元のSeries
A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

*** ４文字以上のデータを取り出す（str.len）***
Series[Series.str.len() &gt;= 4]

A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

*** 先頭が'マ'で始まるデータを取り出す（str.startswith）***
Series[Series.str.startswith('マ')]

A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

*** 'ン'を含むデータを取り出す（str.contains）***
Series[Series.str.contains('ン')]

A0002     メロン
A0003     レモン
A0004    マンゴー
Name: 商品名, dtype: object
</pre>
<p>Seriesの数値データを比較演算子を使って条件設定したり、<br />
文字数、先頭文字が何か、文字が含まれるか否かを条件にしてデータを取り出しています。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">抽出元のSeries（ sri3 ）</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">人口</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">札幌</td>
<td style="width: 25%; height: 24px;">1952000</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">東京</td>
<td style="width: 25%; height: 24px;">9821798</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">大阪</td>
<td style="width: 25%; height: 24px;">2691000</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">抽出元のSeries（ sri2 ）</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
294 # 2,000,000以上のデータを取り出す
295 print("\n*** 2,000,000以上のデータを取り出す ***")
296 print("Series[Series &gt;= 2000000]\n")
297 <span class="marker">result = sri3[sri3 &gt;= 2000000]</span>
298 print(result)
299 
300 print("\n\n抽出元のSeries")
301 print(sri2)
302 
303 # ４文字以上のデータを取り出す（str.len）
304 print("\n*** ４文字以上のデータを取り出す（str.len）***")
305 print("Series[Series.str.len() &gt;= 4]\n")
306 <span class="marker">result = sri2[sri2.str.len() &gt;= 4]</span>
307 print(result)
308 
309 # 先頭が"マ"で始まるデータを取り出す（str.startswith）
310 print("\n*** 先頭が'マ'で始まるデータを取り出す（str.startswith）***")
311 print("Series[Series.str.startswith('マ')]\n")
312 <span class="marker">result = sri2[sri2.str.startswith('マ')]</span>
313 print(result)
314 
315 # "ン"を含むデータを取り出す（str.contains）
316 print("\n*** 'ン'を含むデータを取り出す（str.contains）***")
317 print("Series[Series.str.contains('ン')]\n")
318 <span class="marker">result = sri2[sri2.str.contains('ン')]</span>
319 print(result)
320 
321 #終了９
322 sys.exit()
</code></pre>
<p>297行目では、数値データを比較して条件に合ったデータを取り出しています。<br />
306行目では、文字数を条件にしてデータを取り出しています。（str.len）<br />
312行目では、文字データの先頭が何で始まるかを条件にしてデータを取り出しています。（str.startswith）<br />
318行目では、データに含まれる文字列を条件にしてデータを取り出しています。（str.contains）</p>
<p><!---------------------------------------------------------------------></p>
<h2>７．Seriesのデータを追加、変更、削除する</h2>
<p><!--------------------------------></p>
<h3>① Seriesにデータを追加</h3>
<p>ソースコード <b>#終了９</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesにデータを追加
#

追加前の状態
A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0006    マスカット
Name: 商品名, dtype: object

*** A0005 イチゴ を追加する ***
Series[インデックス] = "値"

A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0006    マスカット
A0005      イチゴ
Name: 商品名, dtype: object

解説:
Seriesの末尾に追加されます。

*** 追加後にインデックスでソート ***

A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0005      イチゴ
A0006    マスカット
Name: 商品名, dtype: object
</pre>
<p>値にインデックスをつけてデータを追加します。<br />
追加したデータはSeriesの末尾に追加されますので、必要に応じてインデックスでソートします。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">追加前の状態</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">A0005 イチゴ を追加</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0005</td>
<td style="width: 25%; height: 24px;">イチゴ</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">インデックスでソート</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0005</td>
<td style="width: 25%; height: 24px;">イチゴ</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
339 print("\n*** A0005 イチゴ を追加する ***")
340 print("Series[インデックス] = \"値\"\n")
341 <span class="marker">sri2['A0005'] = "イチゴ"</span>
342 print(sri2)
343 
344 print("\n解説:")
345 print("Seriesの末尾に追加されます。")
346 
347 print("\n*** 追加後にインデックスでソート ***\n")
348 <span class="marker">sri2 = sri2.sort_index()</span>
349 print(sri2)
350 
351 #終了10
352 sys.exit()
</code></pre>
<p>341行目で、インデックス（'A0005'）と値（"イチゴ"）を指定して追加しています。<br />
348行目で、インデックスでソートしています。</p>
<p><!--------------------------------></p>
<h3>② Seriesのデータを変更</h3>
<p>ソースコード <b>#終了10</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesのデータを変更
#

変更前の状態
A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0005      イチゴ
A0006    マスカット
Name: 商品名, dtype: object

*** A0005 のイチゴ を バナナ に変更する ***
Series[インデックス] = "値"

A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0005      バナナ
A0006    マスカット
Name: 商品名, dtype: object
</pre>
<p>指定したインデックスの値を変更します。<br />
Seriesに、指定したインデックスが存在するとデータの変更になり、存在しないとデータの追加になります。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">変更前の状態</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0005</td>
<td style="width: 25%; height: 24px;">イチゴ</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">A0005 のイチゴ を バナナ に変更</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0005</td>
<td style="width: 25%; height: 24px;">バナナ</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
369 print("\n*** A0005 のイチゴ を バナナ に変更する ***")
370 print("Series[インデックス] = \"値\"\n")
371 <span class="marker">sri2['A0005'] = "バナナ"</span>
372 print(sri2)
373 
374 #終了11
375 sys.exit()
</code></pre>
<p>371行目で、インデックス 'A0005' のデータを "バナナ" に変更しています。</p>
<p><!--------------------------------></p>
<h3>③ Seriesのデータを削除</h3>
<p>ソースコード <b>#終了11</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">#
# Seriesのデータを削除
#

削除前の状態
A0001      みかん
A0002      メロン
A0003      レモン
A0004     マンゴー
A0005      バナナ
A0006    マスカット
Name: 商品名, dtype: object

*** A0006 を削除する ***
Series.drop(インデックス)

A0001     みかん
A0002     メロン
A0003     レモン
A0004    マンゴー
A0005     バナナ
Name: 商品名, dtype: object
</pre>
<p>drop()の引数にインデックスを指定することで削除します。</p>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">削除前の状態</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0005</td>
<td style="width: 25%; height: 24px;">バナナ</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0006</td>
<td style="width: 25%; height: 24px;">マスカット</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 50%; height: 120px;">
<thead>
<tr style="background-color: #f5f5f5; border-color: #ffffff;">
<td style="width: 25%; background-color: #f5f5f5;" colspan="2">A0006 を削除</td>
</tr>
<tr style="background-color: #ccffff;">
<td style="width: 25%; background-color: #d9d9d9;">インデックス</td>
<td style="width: 25%; background-color: #ccffff;">商品名</td>
</tr>
</thead>
<tbody>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0001</td>
<td style="width: 25%; height: 24px;">みかん</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0002</td>
<td style="width: 25%; height: 24px;">メロン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0003</td>
<td style="width: 25%; height: 24px;">レモン</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0004</td>
<td style="width: 25%; height: 24px;">マンゴー</td>
</tr>
<tr style="height: 24px;">
<td style="width: 25%; height: 24px;">A0005</td>
<td style="width: 25%; height: 24px;">バナナ</td>
</tr>
</tbody>
</table>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
392 print("\n*** A0006 を削除する ***")
393 print("Series.drop(インデックス)\n")
394 <span class="marker">sri2 = sri2.drop('A0006')</span>
395 print(sri2)
396 
397 #終了12
398 sys.exit()
</code></pre>
<p>394行目で、インデックス 'A0006' のデータを削除しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>８．Seriesをファイルに出力</h2>
<p><!--------------------------------></p>
<h3>① Excelファイルに出力</h3>
<p>ソースコード <b>#終了12</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。</p>
<pre class="bluerays">#
# SeriesをExcelファイルに出力
#

Excelファイル名：C:\Python\practice18.xlsx

*** Excelファイルに出力  DataFrame.ExcelWriter ***

A0001     みかん
A0002     メロン
A0003     レモン
A0004    マンゴー
A0005     バナナ
Name: 商品名, dtype: object
</pre>
<p>practice18.xlsx を開いて中身を確認します。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode"><code>
412 <span class="marker">filename = dirHome + r"\practice18.xlsx"</span>
413 print("\nExcelファイル名：" + filename)
414 
415 # Excelファイルに出力
416 print("\n*** Excelファイルに出力  DataFrame.ExcelWriter ***\n")
417 print(sri2)
418 <span class="marker">with pd.ExcelWriter(filename,</span>
419                     <span class="marker">mode   = 'w',</span>         # 書き込みモード
420                     <span class="marker">engine = 'openpyxl'</span>   # 書き込みにopenpyxlを使用
421                    ) as writer:
422   sri2.to_excel(writer, 
423                 <span class="marker">sheet_name = '商品一覧',</span>  # シート名
424                 <span class="marker">index      = True)</span>        # インデックスを出力する
425 
426 sys.exit()
</code></pre>
<p>Excelファイルに出力する場合は、DataFrame.ExcelWriter を使います。<br />
418行目で、Excelのファイル名を指定しています。<br />
419行目で、書き込みモード（mode = 'w'）にしています。<br />
420行目で、書き込みにはopenpyxlを使用するようにしています。<br />
423行目で、シート名を商品一覧にしています。<br />
424行目で、Excelファイルにインデックス部分を出力する場合は True を設定します。</p>
<table class="footerguide">
<tbody>
<tr>
<td class="fgleft"><a style="text-decoration: none;" href="https://kotablog.pro/python-operation-inifile/">＜iniファイルの読み書き</a></td>
<td class="fgcenter">Pandas.Seriesの基礎</td>
<td class="fgright"><a style="text-decoration: none;" href="https://kotablog.pro/python-basic-dataframe/">Pandas.DataFrameの基礎＞</a></td>
</tr>
</tbody>
</table><p>The post <a href="https://kotablog.pro/python-basic-series/">Pandas.Seriesの基礎 – 【Pythonプログラミング３ ～Pandas編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pythonのインストール – 【Pythonではじめるプログラミング】</title>
		<link>https://kotablog.pro/python3124-install/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python3124-install</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Wed, 13 Nov 2024 15:04:50 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1172</guid>

					<description><![CDATA[<p>Python のインストールと動作テストの方法について解説します。さらにPythonで使うライブラリもインストールします。 １．Pythonのインストール ダウンロードした python-3.12.4-amd64.exe [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python3124-install/">Pythonのインストール – 【Pythonではじめるプログラミング】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Python のインストールと動作テストの方法について解説します。さらにPythonで使うライブラリもインストールします。<br />
<!---------------------------------------------------------------------></p>
<h2>１．Pythonのインストール</h2>
<p><a href="https://kotablog.pro/python3124-download/"><span class="bold">ダウンロード</span></a>した <b>python-3.12.4-amd64.exe</b> をダブルクリックします。</p>
<p><img decoding="async" class="size-full wp-image-1153 aligncenter" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08.png" alt="python-3.12.4-amd64.exe" width="180" height="180" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08-150x150.png 150w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08-100x100.png 100w" sizes="(max-width: 180px) 100vw, 180px" /></p>
<p><!---------------------------------------------------------------------></p>
<h3>① Install Python 3.12.4(64-bit)</h3>
<p>インストール画面が表示されます。<br />
手順に沿って作業を進めます。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install01.png" alt="Install Python 3.12.4(64-bit)" width="983" height="607" class="alignnone size-full wp-image-1165" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install01.png 983w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install01-300x185.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install01-768x474.png 768w" sizes="(max-width: 983px) 100vw, 983px" /></p>
<p>画面一番下の <img decoding="async" class="alignnone size-full wp-image-183" src="https://kotablog.pro/wp-content/uploads/2022/11/check-box-black.png" alt="" width="16" height="" /> <b><span class="marker-under">Add python.exe to PATH</span></b> にチェックを入れて、<b><span class="marker-under">Customize installation</span></b> をクリックします。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install02.png" alt="" width="985" height="608" class="alignnone size-full wp-image-1166" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install02.png 985w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install02-300x185.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install02-768x474.png 768w" sizes="(max-width: 985px) 100vw, 985px" /></p>
<p><!---------------------------------------------------------------------></p>
<h3>② Optional Features</h3>
<p>全てのチェックボックスにチェックが入っていることを確認して <span class="marker-under"><b>Next</b></span> ボタンをクリックします。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install03.png" alt="Optional Features" width="985" height="608" class="alignnone size-full wp-image-1167" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install03.png 985w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install03-300x185.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install03-768x474.png 768w" sizes="(max-width: 985px) 100vw, 985px" /></p>
<p><!---------------------------------------------------------------------></p>
<h3>③ Advanced Options</h3>
<p>一番上のチェックボックス <img decoding="async" class="alignnone size-full wp-image-183" src="https://kotablog.pro/wp-content/uploads/2022/11/check-box-black.png" alt="" width="16" height="" /> <span class="marker-under"><span class="bold">Install Python 3.12 for all users</span></span> にチェックを入れます。<br />
今回は、C:\Python にインストールするので、<span class="marker-under"><b>Customize install location</b></span> にキーボードから <span class="marker-under"><b>C:\Python</b></span> と入力します。<br />
<span class="marker-under"><b>Install</b></span> ボタンをクリックします。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install04.png" alt="Advanced Options" width="985" height="608" class="alignnone size-full wp-image-1168" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install04.png 985w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install04-300x185.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install04-768x474.png 768w" sizes="(max-width: 985px) 100vw, 985px" /></p>
<p><!---------------------------------------------------------------------></p>
<h3>④ Setup Progress</h3>
<p>インストールが始まりますので、しばらく待ちます。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install05.png" alt="Setup Progress" width="985" height="608" class="alignnone size-full wp-image-1169" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install05.png 985w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install05-300x185.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install05-768x474.png 768w" sizes="(max-width: 985px) 100vw, 985px" /></p>
<p><!---------------------------------------------------------------------></p>
<h3>⑤ Setup was successful</h3>
<p><b>Setup was successful</b> 画面が表示されると、インストール成功です。<br />
<span class="marker-under"><b>Close</b></span> ボタンをクリックして画面を閉じます。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install06.png" alt="Setup was successful" width="985" height="608" class="alignnone size-full wp-image-1170" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install06.png 985w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install06-300x185.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install06-768x474.png 768w" sizes="(max-width: 985px) 100vw, 985px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>２．Pythonの動作確認</h2>
<h4>コマンド プロンプトを立ち上げます</h4>
<p>（１）Windows 画面左下の検索ボックスに、キーボードで <span class="marker-under"><b>cmd</b></span> と入力します。<br />
（２）コマンド プロンプトはよく使うので <span class="marker-under"><b>スタートにピン留め</b></span> をしておきます。<br />
（３）<span class="marker-under"><b>コマンド プロンプト</b></span> をクリックします。</p>
<p><img decoding="async" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install07-1024x910.jpg" alt="" width="1024" height="910" class="alignnone size-large wp-image-1171" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-install07-1024x910.jpg 1024w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install07-300x267.jpg 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install07-768x683.jpg 768w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-install07.jpg 1325w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p><!---------------------------------------------------------------------></p>
<h4>キーボードで python と入力し <span class="keyboard-key">Enter</span> キーを押します</h4>
<p>Python 3.12.4 と表示されていることを確認します。</p>
<pre class="bluerays">Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Users\kotablog&gt;python
<span class="red-under">Python 3.12.4</span> (tags/v3.12.4:8e8a4ba, Jun  6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
<span class="marker-under-blue">&gt;&gt;&gt;
</span>
</pre>
<div class="blank-box bb-tab bb-point bb-blue">左端が &gt;&gt;&gt; となっている時は、対話モード(インタラクティブモード)と言います。</div>
<p><!---------------------------------------------------------------------></p>
<h4>対話モードを終了します</h4>
<p><span class="keyboard-key"> Ctrl </span> キーを押しながら <span class="keyboard-key"> Ｚ </span> キーを押します。そのあと、<span class="keyboard-key"> Enter </span> キーを押します。</p>
<pre class="bluerays">Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Users\kotablog&gt;python
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun  6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; ^Z


C:\Users\kotablog&gt;
</pre>
<p><!---------------------------------------------------------------------></p>
<h2>３．pywin32ライブラリのインストール</h2>
<p>pywin32ライブラリとは？</p>
<div class="memo-box common-icon-box">
<ul>
<li>Windowsの画面操作を自動化したい</li>
<li>Outlookメールを自動で作成したい</li>
<li>ExcelマクロをPythonから実行したい</li>
</ul>
</div>
<p>このような場合に必要となる全世界で使われている共通部品です。<br />
それではインストールしてみましょう。<br />
コマンド プロンプトにキーボードから <span class="bold"><span class="marker-under">pip install pywin32</span></span> と入力して、<span class="keyboard-key"> Enter </span> キーを押します。</p>
<pre class="bluerays">C:\Users\kotablog&gt;pip install pywin32</pre>
<div class="blank-box bb-tab bb-point bb-blue">"pip install" はライブラリをインストールするためのコマンドです。</div>
<pre class="bluerays">C:\Users\kotablog&gt;pip install pywin32
Collecting pywin32
  Downloading pywin32-307-cp312-cp312-win_amd64.whl.metadata (8.3 kB)
Downloading pywin32-307-cp312-cp312-win_amd64.whl (6.5 MB)
   <span class="bluerays_lightgreen">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span class="bluerays_green">6.5/6.5 MB</span> <span class="bluerays_red">915.7 kB/s</span> eta <span class="bluerays_lightblue">0:00:00</span>
Installing collected packages: pywin32
<span class="red-under">Successfully installed pywin32</span>-307

[<span class="bluerays_blue">notice</span>] A new release of pip is available: <span class="bluerays_red">24.0</span> -> <span class="bluerays_green">24.2</span>
[<span class="bluerays_blue">notice</span>] To update, run: <span class="bluerays_green">python.exe -m pip install --upgrade pip</span>

C:\Users\kotablog&gt;
</pre>
<p><span class="bold">Successfully installed pywin32</span> と表示されれば、インストールは無事完了です。</p>
<p><!---------------------------------------------------------------------></p>
<h2>４．pip のアップグレード</h2>
<p>コマンド プロンプトに以下のメッセージが表示されている場合は、pip をアップグレードします。</p>
<pre class="bluerays">[<span class="bluerays_blue">notice</span>] A new release of pip is available: <span class="bluerays_red">24.0</span> -> <span class="bluerays_green">24.2</span>
[<span class="bluerays_blue">notice</span>] To update, run: <span class="bluerays_green">python.exe -m pip install --upgrade pip</span></pre>
<p>コマンド プロンプトにキーボードから <span class="bold"><span class="marker-under"><code>python -m pip install --upgrade pip</code></span></span> と入力して、<span class="keyboard-key"> Enter </span> キーを押します。</p>
<pre class="bluerays">C:\Users\kotablog&gt;python -m pip install --upgrade pip</pre>
<p>アップグレードが始まります。</p>
<pre class="bluerays">C:\Users\kotablog&gt;python -m pip install --upgrade pip
Requirement already satisfied: pip in c:\python\lib\site-packages (24.0)
Collecting pip
  Downloading pip-24.2-py3-none-any.whl.metadata (3.6 kB)
Downloading pip-24.2-py3-none-any.whl (1.8 MB)
   <span class="bluerays_lightgreen">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span class="bluerays_green">1.8/1.8 MB</span> <span class="bluerays_red">370.2 kB/s</span> eta <span class="bluerays_lightblue">0:00:00</span>
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.0
    Uninstalling pip-24.0:
      Successfully uninstalled pip-24.0
<span class="red-under">Successfully installed pip</span>-24.2

C:\Users\kotablog&gt;
</pre>
<p><span class="bold">Successfully installed pip</span> と表示されれば、アップグレードは無事完了です。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．Pythonとpywin32ライブラリのテスト</h2>
<div class="information-box common-icon-box">このテストはパソコンに Microsoft Outlook がインストールされていて、メールアカウントの設定がされている必要があります。</div>
<p>コマンド プロンプトにキーボードから <span class="bold"><span class="marker-under">python</span></span> と入力して、<span class="keyboard-key"> Enter </span> キーを押して<span class="red-under">対話モードにします</span>。</p>
<pre class="bluerays">C:\Users\kotablog&gt;python
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun  6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
</pre>
<p>以下の５行をコピー＆ペースト（コピペ）します。</p>
<pre><code>import win32com.client as win32
outlook_mail = win32.Dispatch("outlook.application").CreateItem(0)
outlook_mail.Subject = "テストメール"
outlook_mail.Body = "Python プログラミングにようこそ！"
outlook_mail.Save()
</code></pre>
<pre class="bluerays">C:\Users\kotablog&gt;python
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun  6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client as win32
>>> outlook_mail = win32.Dispatch("outlook.application").CreateItem(0)
>>> outlook_mail.Subject = "テストメール"
>>> outlook_mail.Body = "Python プログラミングにようこそ！"
>>> outlook_mail.Save()
</pre>
<p>コピー＆ペーストのあと、<span class="keyboard-key"> Enter </span> キーを押します。</p>
<p>Outlookの下書きフォルダに『テストメール』が、作成されていることを確認します。</p>
<p>コマンド プロンプトの右上の <span class="keyboard-key"> × </span> ボタンをクリックしてコマンド プロンプトを閉じます。</p>
<p>以上でPythonのインストールは終わりです。おつかれさまでした。</p>
<table class="footerguide">
<tbody>
<tr>
<td class="fgleft"><a style="text-decoration: none;" href="https://kotablog.pro/python3124-download/">＜Pythonのダウンロード</a></td>
<td class="fgcenter">Pythonのインストール</td>
<td class="fgright"><a style="text-decoration: none;" href="https://kotablog.pro/what-programming/">プログラミングの解説＞</a></td>
</tr>
</tbody>
</table><p>The post <a href="https://kotablog.pro/python3124-install/">Pythonのインストール – 【Pythonではじめるプログラミング】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pythonのダウンロード - 【Pythonではじめるプログラミング】</title>
		<link>https://kotablog.pro/python3124-download/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python3124-download</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Wed, 13 Nov 2024 03:04:47 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1155</guid>

					<description><![CDATA[<p>Python のダウンロード方法について解説します。ここでは、動作が比較的安定しているバージョン 3.12.4 を扱っていきます。 Windows 11 Pro, 64ビット, スクリーンショットは Google Chr [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python3124-download/">Pythonのダウンロード - 【Pythonではじめるプログラミング】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Python のダウンロード方法について解説します。ここでは、動作が比較的安定しているバージョン 3.12.4 を扱っていきます。<br />
<span class="badge badge-blue">Windows 11 Pro, 64ビット, スクリーンショットは Google Chrome です</span><br />
<!---------------------------------------------------------------------></p>
<h2>１．Pythonの公式ホームページを開きます</h2>
<p>公式ホームページリンク：<a href="https://www.python.org/">https://www.python.org/</a></p>
<p><img decoding="async" class="alignnone size-full wp-image-1146" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download01.png" alt="Pythonの公式ホームページ" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download01.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download01-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download01-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>２．Downloads を選択します</h2>
<p>画面上部に表示されているメニューの中から <b><span class="marker-under">Downloads</span></b> にマウスを合わせるとメニューが表示されます。今回 Windows 用をダウンロードしますので、サブメニューの中から <b><span class="marker-under">Windows</span></b> をクリックします。</p>
<p><img decoding="async" class="alignnone size-full wp-image-1147" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download02.png" alt="ＯＳを選択" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download02.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download02-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download02-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><b>『 Python Releases for Windows 』</b> の画面が表示されます。<br />
Windows 用の Python の色々なバージョンのダウンロード用リンクが掲載された画面です。</p>
<p><img decoding="async" class="alignnone size-full wp-image-1148" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download03.png" alt="ダウンロード用リンク画面" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download03.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download03-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download03-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>３．検索ボックスを開きます</h2>
<p><span class="keyboard-key">Ctrl</span> キーを押しながら <span class="keyboard-key"> Ｆ </span> キーを押します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-1149" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download04.png" alt="検索ボックスを開く" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download04.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download04-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download04-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>４．検索用のボックスに 3.12.4 と入力します</h2>
<p>検索用のボックスにキーボードから <span class="marker-under">3.12.4</span> と入力します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-1150" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download05.png" alt="バージョン 3.12.4 を検索" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download05.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download05-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download05-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>５．Windows installer (64-bit) をクリックします</h2>
<p>今回 Windows 64ビット用をダウンロードしますので、画面左下の <span class="bold"><span style="border-bottom: solid 1px #ffdf76;">Windows installer (64-bit)</span></span> をクリックします。</p>
<p><img decoding="async" class="alignnone size-full wp-image-1151" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download06.png" alt="Windows installer (64-bit) をクリック" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download06.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download06-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download06-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>６．ダウンロードが始まります</h2>
<p><img decoding="async" class="alignnone size-full wp-image-1152" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download07.png" alt="ダウンロード開始" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download07.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download07-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download07-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p><!---------------------------------------------------------------------></p>
<h2>７．ダウンロード フォルダの中を確認します</h2>
<p>最後に、エクスプローラーを立ち上げて、ダウンロード フォルダの中を確認します。<br />
<b>python-3.12.4-amd64.exe</b> があればダウンロードは終了です。</p>
<p><img decoding="async" class="size-full wp-image-1153 aligncenter" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08.png" alt="python-3.12.4-amd64.exe" width="180" height="180" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08-150x150.png 150w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download08-100x100.png 100w" sizes="(max-width: 180px) 100vw, 180px" /><br />
<img decoding="async" class="alignnone size-full wp-image-1154" src="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download09.png" alt="python-3.12.4-amd64.exe" width="800" height="600" srcset="https://kotablog.pro/wp-content/uploads/2024/11/python3124-download09.png 800w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download09-300x225.png 300w, https://kotablog.pro/wp-content/uploads/2024/11/python3124-download09-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<table class="footerguide">
<tbody>
<tr>
<td class="fgleft"></td>
<td class="fgcenter">Pythonのダウンロード</td>
<td class="fgright"><a style="text-decoration: none;" href="https://kotablog.pro/python3124-install/">Pythonのインストール＞</a></td>
</tr>
</tbody>
</table><p>The post <a href="https://kotablog.pro/python3124-download/">Pythonのダウンロード - 【Pythonではじめるプログラミング】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>iniファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</title>
		<link>https://kotablog.pro/python-operation-inifile/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-operation-inifile</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 22:28:36 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1141</guid>

					<description><![CDATA[<p>Pythonで iniファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．演習用プログラムとiniファイルのダウンロード 演習用プログラム（ practice17.py [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-operation-inifile/">iniファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Pythonで iniファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．演習用プログラムとiniファイルのダウンロード</h2>
<p>演習用プログラム（ practice17.py ）と iniファイル（ practice17.ini ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice17.py、practice17.ini を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice17-txt/'>practice17.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 2.92 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice17-txt/?wpdmdl=1136&refresh=69d4552f110e51775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice17_ini-txt/'>practice17_ini.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 0.17 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice17_ini-txt/?wpdmdl=1138&refresh=69d4552f119291775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>２．ソースコードの表示とiniファイルの内容の確認</h2>
<p>メモ帳を使って、演習用プログラム（ practice17.py ）を開きます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/notepad-practice17.png" alt="practice17.py" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice17.py</p></div><br />
メモ帳を使って、iniファイル（ practice17.ini ）の内容を確認します。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/practice17_practice17_2-2.png" alt="practice17.ini" width="800" height="500" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice17.ini</p></div><br />
先頭が ";" になっている行は、コメント行です。<br />
iniファイルの構成は、以下の通りです。<br />
[セクション]<br />
キー = 値<br />
<!---------------------------------------------------------------------></p>
<h2>３．iniファイルの読み込み</h2>
<p>最初に iniファイルを読み込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① iniファイルの読み込み</h3>
<p>まずは、コマンドプロンプト で practice17.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">C:\Users\kotablog>python C:\Python\practice17.py

*** iniファイルの読み込み ****

セクションの存在確認を行います
セクション PC は存在します
セクション 時刻 は存在します

セクション内のキーの存在確認を行います
セクション PC のキー OS は存在します
セクション 時刻 のキー 前回起動 は存在します

値を取得します
PCのOSは、Windows11 です
前回起動時刻は、2024/10/10 02:15 です
</pre>
<p>&nbsp;<br />
プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
01&emsp;# -*- coding: utf-8 -*-
02&emsp;"""
03&emsp;演習プログラム１７
04&emsp;
05&emsp;  iniファイルの読み書き
06&emsp;
07&emsp;"""
08&emsp;import sys           # sysモジュールのインポート
09&emsp;import configparser  # iniファイルアクセス用
10&emsp;import datetime      # 現在日時取得用
11&emsp;
</code>
</pre>
<p>ライブラリのインポート<br />
09行目で iniファイルにアクセスするときに必要な configparserライブラリをインポートしています。<br />
10行目で 現在日時取得時に必要な datetimeライブラリをインポートしています。</p>
<pre class="bluerayscode">
<code>
12&emsp;print("\n*** iniファイルの読み込み ****")
13&emsp;
14&emsp;file_name1 = r"C:\Python\practice17.ini"  # iniファイルのフルパス名
15&emsp;
16&emsp;# セクションのセット
17&emsp;SECTION1 = 'PC'
18&emsp;SECTION2 = '時刻'
19&emsp;
</code>
</pre>
<p>セクションのセット<br />
17行目と18行目で 'PC'セクションを 変数 SECTION1 に、'時刻'セクションを 変数 SECTION2 にセットしています。</p>
<pre class="bluerayscode">
<code>
20&emsp;# iniファイルの読み込み
21&emsp;config = configparser.ConfigParser()
22&emsp;config.read(file_name1)
23&emsp;
</code>
</pre>
<p>iniファイルの読み込み<br />
21行目と22行目で iniファイルを読み込んでいます。</p>
<pre class="bluerayscode">
<code>
24&emsp;# セクションが存在するかの確認
25&emsp;print("\nセクションの存在確認を行います")
26&emsp;if config.has_section(SECTION1):
27&emsp;  print("セクション " + SECTION1 + " は存在します")
28&emsp;else:
29&emsp;  print("セクション " + SECTION1 + " は存在しません")
30&emsp;  sys.exit()
31&emsp;
32&emsp;if config.has_section(SECTION2):
33&emsp;  print("セクション " + SECTION2 + " は存在します")
34&emsp;else:
35&emsp;  print("セクション " + SECTION2 + " は存在しません")
36&emsp;  sys.exit()
37&emsp;
</code>
</pre>
<p>セクションが存在するかの確認<br />
セクションにアクセスする前に、iniファイル内にセクションが存在しているかを確認することができます。<br />
26行目と32行目の config.has_section(セクション) が True の場合は、セクションが存在しています。</p>
<pre class="bluerayscode">
<code>
38&emsp;# セクション内のキーが存在するかの確認
39&emsp;print("\nセクション内のキーの存在確認を行います")
40&emsp;key1 = "OS"
41&emsp;if key1.lower() in list(map(lambda x:x[0], config.items(SECTION1))):
42&emsp;  print("セクション " + SECTION1 + " のキー " + key1 + " は存在します")
43&emsp;else:
44&emsp;  print("キー " + key1 + " は存在しません")
45&emsp;  sys.exit()
46&emsp;
47&emsp;key2 = "前回起動"
48&emsp;if key2.lower() in list(map(lambda x:x[0], config.items(SECTION2))):
49&emsp;  print("セクション " + SECTION2 + " のキー " + key2 + " は存在します")
50&emsp;else:
51&emsp;  print("キー " + key2 + " は存在しません")
52&emsp;  sys.exit()
53&emsp;
</code>
</pre>
<p>セクション内のキーが存在するかの確認<br />
キーにアクセスする前に、セクション内にキーが存在しているかを確認することができます。<br />
41行目と48行目の キー.lower() in list(map(lambda x:x[0], config.items(セクション))) が True の場合は、キーが存在しています。</p>
<pre class="bluerayscode">
<code>
54&emsp;# 値の取得
55&emsp;print("\n値を取得します")
56&emsp;
57&emsp;value_OS = config.get(SECTION1, 'OS')
58&emsp;print("PCのOSは、" + value_OS + " です")
59&emsp;
60&emsp;value_前回起動 = config[SECTION2]['前回起動']
61&emsp;print("前回起動時刻は、" + value_前回起動 + " です")
62&emsp;
63&emsp;#終了１
64&emsp;sys.exit()
</code>
</pre>
<p>値の取得<br />
57行目の config.get(セクション, キー) もしくは、<br />
60行目の config[セクション][キー] で、値を取得することができます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>４．iniファイルの書き込み</h2>
<p>次に iniファイルへ書き込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① iniファイルの書き込み</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** iniファイルの書き込み ****

セクション 時刻 の前回起動 の値を現在時刻にします
</pre>
<p>&nbsp;<br />
エクスプローラから、practice17_2.ini を開いて内容を確認してください。<br />
※本来であれば、practice17.ini に上書き保存するところですが、本演習では practice17_2.ini に書き込んでいます。</p>
<p>前回起動の値が書き換わっていますが、コメント行が消えています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
66&emsp;print("\n*** iniファイルの書き込み ****")
67&emsp;
68&emsp;file_name2 = r"C:\Python\practice17_2.ini"  # iniファイルのフルパス名
69&emsp;
70&emsp;# 現在時刻の取得
71&emsp;strNow = datetime.datetime.now().strftime("%Y/%m/%d %H:%M")
72&emsp;
73&emsp;# セクション時刻の前回起動を書き換え
74&emsp;print("\nセクション " + SECTION2 + " の" + key2 + " の値を現在時刻にします")
75&emsp;config[SECTION2]['前回起動'] = strNow
76&emsp;
77&emsp;with open(file_name2, 'w') as f:            # iniファイルの書き込み
78&emsp;  config.write(f)
79&emsp;
80&emsp;#終了２
81&emsp;sys.exit()
</code>
</pre>
<p>71行目で 現在時刻を取得して 変数 strNow にセットしています。<br />
75行目で SECTION2 の キーが 前回起動 の値を 現在時刻に置き換えています。<br />
77行目と78行目で iniファイルに書き込んでいます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．書き込み時にコメントを残す</h2>
<p><!--------------------------------></p>
<h3>① セクションの外のコメントを残す</h3>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** 書き込み時にコメントを残す ****

セクションの外のコメントを残します
</pre>
<p>&nbsp;<br />
エクスプローラから、practice17_2.ini を開いて内容を確認してください。</p>
<p>コメント行が残っています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
83&emsp;print("\n*** 書き込み時にコメントを残す ****")
84&emsp;
85&emsp;# セクションの外のコメントを残す
86&emsp;print("\nセクションの外のコメントを残します")
87&emsp;with open(file_name2, 'w') as f:  # iniファイルを開く
88&emsp;  f.write(';\n')
89&emsp;  f.write('; 演習プログラム１７\n')
90&emsp;  f.write(';\n')
91&emsp;  f.write(';  iniファイルの読み書き\n')
92&emsp;  f.write(';\n')
93&emsp;  config.write(f)                 # iniファイルの書き込み
94&emsp;
95&emsp;sys.exit()
</code>
</pre>
<p>93行目の iniファイルの内容を書き込む前に、<br />
88行目から92行目で セクションの外のコメントを書いています。<br />
&nbsp;</p>
<table class="footerguide">
<tr>
<td class="fgleft">
<a style="text-decoration: none;" href="https://kotablog.pro/python-openpyxl-excelfile/">＜openpyxlを使った Excelファイルの読み書き</a>
</td>
<td class="fgcenter">
iniファイルの読み書き
</td>
<td class="fgright">
<a style="text-decoration: none;" href="https://kotablog.pro/python-basic-series/">Pandas.Seriesの基礎＞</a>
</td>
</tr>
</table><p>The post <a href="https://kotablog.pro/python-operation-inifile/">iniファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>openpyxlを使った Excelファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</title>
		<link>https://kotablog.pro/python-openpyxl-excelfile/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-openpyxl-excelfile</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 22:09:55 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1131</guid>

					<description><![CDATA[<p>Pythonのopenpyxlライブラリを使ったExcelファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．openpyxlライブラリのインストール openpyxl [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-openpyxl-excelfile/">openpyxlを使った Excelファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Pythonのopenpyxlライブラリを使ったExcelファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．openpyxlライブラリのインストール</h2>
<p>openpyxl を使うには、事前にインストール作業が必要です。<br />
手順を追って説明します。<br />
<!--------------------------------></p>
<h3>① コマンドプロンプトを管理者として実行</h3>
<p>Windows画面の左下にある検索ボックスに、キーボードから cmd と入力します。<br />
右上に コマンドプロンプト が表示されていることを確認して、『管理者として実行』をクリックします。<br />
<div id="attachment_1115" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-1115" src="https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt.png" alt="コマンドプロンプトを管理者として実行" width="800" height="713" class="size-large wp-image-1115" srcset="https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt.png 1337w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-300x267.png 300w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-1024x913.png 1024w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-768x685.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1115" class="wp-caption-text">コマンドプロンプトを管理者として実行</p></div><br />
ユーザー アカウント制御 ダイアログボックスが表示されて、「このアプリがデバイスに変更を加えることを許可しますか？」と聞いてくるので、『はい』をクリックします。<br />
管理者：コマンドプロンプト が起動します。</p>
<pre class="bluerays">
Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!--------------------------------></p>
<h3>② インストールされているライブラリの確認</h3>
<p>管理者：コマンドプロンプト でキーボードから pip list と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールされているライブラリの一覧が表示されます。<br />
openpyxl がインストールされていないことを確認します。</p>
<pre class="bluerays">
Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>pip list
Package         Version
--------------- -----------
numpy           2.1.2
pandas          2.2.3
pip             24.2
python-dateutil 2.9.0.post0
pytz            2024.2
pywin32         307
six             1.16.0
tzdata          2024.2
xlwings         0.33.1

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!--------------------------------></p>
<h3>③ openpyxl のインストール</h3>
<p>管理者：コマンドプロンプト でキーボードから pip install openpyxl と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
最後の行に『 Successfully installed 』と表示されれば、インストール完了です。</p>
<pre class="bluerays">
C:\Windows\System32>pip install openpyxl
Collecting openpyxl
  Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting et-xmlfile (from openpyxl)
  Downloading et_xmlfile-1.1.0-py3-none-any.whl.metadata (1.8 kB)
Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Downloading et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-1.1.0 openpyxl-3.1.5

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p>【補足】学校や会社内のパソコンをお使いの方へ<br />
pip install openpyxl が失敗する場合があります。<br />
この場合は、インストールする際にプロキシサーバーの情報を渡す必要があります</p>
<p>プロキシサーバーの情報は、システム管理者に確認してください。<br />
・プロキシサーバー名<br />
・ポート番号</p>
<p>プロキシサーバーの情報を取得できましたら、openpyxl のインストールは次のようにします。<br />
pip install --proxy="プロキシサーバー名:ポート番号" openpyxl</p>
<p><!--------------------------------></p>
<h3>④ openpyxl のインストールの確認</h3>
<p>管理者：コマンドプロンプト でキーボードから pip list と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールされているライブラリの一覧が表示されます。<br />
一覧に openpyxl があることを確認します。</p>
<pre class="bluerays">
C:\Windows\System32>pip list
Package         Version
--------------- -----------
et-xmlfile      1.1.0
numpy           2.1.2
openpyxl        3.1.5
pandas          2.2.3
pip             24.2
python-dateutil 2.9.0.post0
pytz            2024.2
pywin32         307
six             1.16.0
tzdata          2024.2
xlwings         0.33.1

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!---------------------------------------------------------------------></p>
<h2>２．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice16.py ）とExcelファイル（ excel_file1.xlsx ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice16.py、excel_file1.xlsx を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice16-txt/'>practice16.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 5.51 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice16-txt/?wpdmdl=1128&refresh=69d4552f146961775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsx.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/excel_file1-xlsx/'>excel_file1.xlsx</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 9.09 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/excel_file1-xlsx/?wpdmdl=1129&refresh=69d4552f14f081775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>３．ソースコードの表示とExcelファイルの内容の確認</h2>
<p>メモ帳を使って、演習用プログラム（ practice16.py ）を開きます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/notepad-practice16.png" alt="practice16.py" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice16.py</p></div><br />
Excelファイル（ excel_file1.xlsx ）の内容を確認します。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/practice16-excel_file1.png" alt="excel_file1.xlsx" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">excel_file1.xlsx</p></div><br />
<!---------------------------------------------------------------------></p>
<h2>４．Excelファイルの読み込み</h2>
<p>最初に openpyxlライブラリ を使って、Excelファイルを読み込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① Excelファイルを読み込む</h3>
<p>まずは、コマンドプロンプト で practice16.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">C:\Users\kotablog>python C:\Python\practice16.py

*** Excelファイルの読み込み ****

excel_file1.xlsxを開きます

A1セルのデータを取得します
商品コード

１行２列目のデータを取得します
商品名
商品名

A1セルからC2セルのデータを取得します（セル番地でアクセス）
[['商品コード', '商品名', '金額'], ['A0001', 'みかん', 100]]

A1セルからC2セルのデータを取得します（行番号、列番号でアクセス）
[['商品コード', '商品名', '金額'], ['A0001', 'みかん', 100]]
</pre>
<p>&nbsp;<br />
プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
01&emsp;# -*- coding: utf-8 -*-
02&emsp;"""
03&emsp;演習プログラム１６
04&emsp;
05&emsp;  openpyxlを使った Excelファイルの読み書き
06&emsp;
07&emsp;"""
08&emsp;import sys             # sysモジュールのインポート
09&emsp;import openpyxl as px  # Excelファイルアクセス用
10&emsp;from openpyxl.styles import PatternFill           # セルの背景色設定用
11&emsp;from openpyxl.styles.borders import Border, Side  # セルの罫線設定用
12&emsp;
</code>
</pre>
<p>ライブラリのインポート<br />
09行目で openpyxlライブラリをインポートしています。このときライブラリ名を px に設定しています。<br />
10行目の PatternFill は、セルの背景色を設定するときに使います。<br />
11行目の Border と Side は、セルの罫線を設定するときに使います。</p>
<pre class="bluerayscode">
<code>
13&emsp;print("\n*** Excelファイルの読み込み ****")
14&emsp;
15&emsp;# Excelファイルを開く
16&emsp;print("\nexcel_file1.xlsxを開きます")
17&emsp;file_name1 = r"C:\Python\excel_file1.xlsx"  # ファイルのフルパス名
18&emsp;
19&emsp;wb = px.load_workbook(file_name1, read_only=True) # ブックの読み込み
20&emsp;ws = wb['Sheet1']                           # Sheet1を選択
21&emsp;
</code>
</pre>
<p>Excelファイルを開く<br />
17行目で 変数 file_name1 に excel_file1.xlsx のフルパスファイル名をセットしています。<br />
19行目で ブックを読み取り専用で開いて読み込みます。<br />
20行目で "Sheet1" を選択しています。</p>
<pre class="bluerayscode">
<code>
22&emsp;# 単一セルの読み込み（セル番地でアクセス）
23&emsp;print("\nA1セルのデータを取得します")
24&emsp;print(ws['A1'].value)
25&emsp;
</code>
</pre>
<p>単一セルの読み込み（セル番地でアクセス）<br />
24行目で ws[セル番地].value で、そのセルの値を取得しています。</p>
<pre class="bluerayscode">
<code>
26&emsp;# 単一セルの読み込み（行番号、列番号でアクセス）
27&emsp;print("\n１行２列目のデータを取得します")
28&emsp;print(ws.cell(row=1, column=2).value)
29&emsp;print(ws.cell(1, 2).value)
30&emsp;
</code>
</pre>
<p>単一セルの読み込み（行番号、列番号でアクセス）<br />
28行目、29行目は 行番号と列番号（今回は １行２列目）でセルを指定して、そのセルの値を取得しています。<br />
以下の２つの書き方はどちらも同じ結果を得ることができます。<br />
 ws.cell(row=行番号, column=列番号).value<br />
 ws.cell(行番号, 列番号).value</p>
<pre class="bluerayscode">
<code>
31&emsp;# セル範囲の読み込み（セル番地でアクセス）
32&emsp;print("\nA1セルからC2セルのデータを取得します（セル番地でアクセス）")
33&emsp;list2d = [[cell.value for cell in row] for row in ws['A1:C2']]
34&emsp;print(list2d)
35&emsp;
</code>
</pre>
<p>セル範囲の読み込み（セル番地でアクセス）<br />
33行目は セル番地でセル範囲を指定（ ws['A1:C2'] ）し、リスト内包表記を使って、２次元リストを取得しています。</p>
<p><a style="text-decoration: none;" href="https://note.nkmk.me/python-list-comprehension/">Pythonリスト内包表記の使い方</a></p>
<pre class="bluerayscode">
<code>
36&emsp;# セル範囲の読み込み（行番号、列番号でアクセス）
37&emsp;print("\nA1セルからC2セルのデータを取得します（行番号、列番号でアクセス）")
38&emsp;list2d = [[cell.value for cell in row] for row in ws.iter_rows(min_row = 1, max_row = 2, min_col = 1, max_col = 3)]
39&emsp;print(list2d)
40&emsp;
</code>
</pre>
<p>セル範囲の読み込み（行番号、列番号でアクセス）<br />
38行目は 下記の通りセルの行番号と列番号でセル範囲を指定し、リスト内包表記を使って、２次元リストを取得しています。<br />
・min_row：指定したい範囲の左上のセルの行番号<br />
・max_row：指定したい範囲の右下のセルの行番号<br />
・min_col：指定したい範囲の左上のセルの列番号<br />
・max_col：指定したい範囲の右下のセルの列番号</p>
<pre class="bluerayscode">
<code>
41&emsp;wb.close()                                  # ブックを閉じる
42&emsp;
43&emsp;#終了１
44&emsp;sys.exit()
</code>
</pre>
<p>Excelファイルを閉じる<br />
41行目の close()メソッドで、ブックを閉じています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．Excelファイルの書き込み</h2>
<p>次に openpyxlライブラリ を使って、Excelファイルに書き込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① Excelファイルに書き込む</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** Excelファイルの書き込み ****

excel_file1.xlsxを開きます

A3セルにデータを書き込みます（A0002）

３行２列目のセルにデータを書き込みます（メロン）

３行３列目のセルにデータを書き込みます（200）

A4セルからリストのデータを書き込みます（A0003, いちご, 300）

A5セルから２次元リストのデータを書き込みます（A0004,バナナ, 400、A0005,レモン,500）

C7セルに金額を合計する数式を入れる（=SUM(C2:C6)）
</pre>
<p>&nbsp;<br />
エクスプローラから、excel_file2.xlsx を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
46&emsp;print("\n*** Excelファイルの書き込み ****")
47&emsp;
48&emsp;print("\nexcel_file1.xlsxを開きます")
49&emsp;wb = px.load_workbook(file_name1)           # ブックの読み込み
50&emsp;ws = wb['Sheet1']                           # Sheet1を選択
51&emsp;
</code>
</pre>
<p>Excelファイルを開く<br />
49行目で 書き込み可能でブックを開いて、読み込みます。<br />
50行目で "Sheet1" を選択しています。</p>
<pre class="bluerayscode">
<code>
52&emsp;# 単一セルに書き込み（セル番地でアクセス）
53&emsp;print("\nA3セルにデータを書き込みます（A0002）")
54&emsp;ws['A3'] = "A0002"
55&emsp;
</code>
</pre>
<p>単一セルに書き込み（セル番地でアクセス）<br />
54行目で ws[セル番地] でセルを指定（今回は A3セル）して、そのセルに値（"A0002"）を入れています。</p>
<pre class="bluerayscode">
<code>
56&emsp;# 単一セルの書き込み（行番号、列番号でアクセス）
57&emsp;print("\n３行２列目のセルにデータを書き込みます（メロン）")
58&emsp;ws.cell(row=3, column=2).value = "メロン"
59&emsp;ws.cell(row=3, column=2, value="メロン")
60&emsp;
61&emsp;print("\n３行３列目のセルにデータを書き込みます（200）")
62&emsp;ws.cell(3, 3).value = 200
63&emsp;ws.cell(3, 3, 200)
64&emsp;
</code>
</pre>
<p>単一セルの書き込み（行番号、列番号でアクセス）<br />
58行目、59行目は 行番号と列番号（今回は ３行２列目）でセルを指定して、そのセルに値（"メロン"）を入れています。<br />
以下の２つの書き方はどちらも同じ結果を得ることができます。<br />
 ws.cell(row=行番号, column=列番号).value = セルに入れる値<br />
 ws.cell(row=行番号, column=列番号, value=セルに入れる値)</p>
<p>62行目、63行目は cell()の引数の row=、column=、value= を省略しています。<br />
 ws.cell(行番号, 列番号).value = セルに入れる値<br />
 ws.cell(行番号, 列番号, セルに入れる値)</p>
<pre class="bluerayscode">
<code>
65&emsp;# 行方向に書き込み
66&emsp;print("\nA4セルからリストのデータを書き込みます（A0003, いちご, 300）")
67&emsp;datalist = ['A0003', 'いちご', 300]
68&emsp;ws.append(datalist)
69&emsp;
</code>
</pre>
<p>行方向に書き込み<br />
67行目で １行分のリストを用意しています。<br />
68行目で append()メソッドを使って、行の追加を行っています。３行目までセルに値が入っているので、４行目に追加されます。</p>
<pre class="bluerayscode">
<code>
70&emsp;# 表形式で書き込み
71&emsp;print("\nA5セルから２次元リストのデータを書き込みます（A0004,バナナ, 400、A0005,レモン,500）")
72&emsp;list2d = [["A0004", "バナナ", 400],["A0005", "レモン", 500]]
73&emsp;for row in list2d:
74&emsp;  ws.append(row)
75&emsp;
</code>
</pre>
<p>表形式で書き込み<br />
72行目で ２行分の２次元リストを用意しています。<br />
73行目と74行目で append()メソッドを使って、２行分の追加を行っています。４行目までセルに値が入っているので、５行目と６行目に追加されます。</p>
<pre class="bluerayscode">
<code>
76&emsp;# セルに数式を入れる
77&emsp;print("\nC7セルに金額を合計する数式を入れる（=SUM(C2:C6)）")
78&emsp;ws['C7'] = "=SUM(C2:C6)"
79&emsp;
</code>
</pre>
<p>セルに数式を入れる<br />
78行目で ws[セル番地] でセルを指定（今回は C7セル）して、そのセルに数式（"=SUM(C2:C6)"）を入れています。<br />
セルを行番号と列番号で指定しても同じ結果を得ることができます。</p>
<pre class="bluerayscode">
<code>
80&emsp;file_name2 = r"C:\Python\excel_file2.xlsx"  # ファイルのフルパス名
81&emsp;wb.save(file_name2)                         # ブックの保存
82&emsp;wb.close()                                  # ブックを閉じる
83&emsp;
84&emsp;#終了２
85&emsp;sys.exit()
</code>
</pre>
<p>ブックを保存後に閉じる<br />
80行目で 変数 file_name2 に excel_file2.xlsx のフルパスファイル名をセットしています。<br />
81行目で ファイル名を 変数 file_name2 で、ブックを保存しています。<br />
82行目の close()メソッドで、ブックを閉じています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>６．セルの装飾</h2>
<p>ここでは、セルの背景色の設定と、セルの表示形式（カンマ編集）の設定を行います。<br />
<!--------------------------------><br />
ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** セルの装飾 ****

excel_file2.xlsxを開きます

A1:C1のセル背景色を水色にします

金額の列をカンマ編集にします
</pre>
<p>&nbsp;<br />
エクスプローラから、excel_file2.xlsx を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
 87&emsp;print("\n*** セルの装飾 ****")
 88&emsp;
 89&emsp;print("\nexcel_file2.xlsxを開きます")
 90&emsp;wb = px.load_workbook(file_name2)           # ブックの読み込み
 91&emsp;ws = wb['Sheet1']                           # Sheet1を選択
 92&emsp;
 93&emsp;# セル背景色の設定
 94&emsp;print("\nA1:C1のセル背景色を水色にします")
 95&emsp;rgb = [204, 255, 255]                       # 水色（RGB値）
 96&emsp;color_code = ('#{}{}{}'.format(hex(rgb[0]), hex(rgb[1]), hex(rgb[2]))).replace('0x', '')[1:]  # RGB値から16進数カラーコードに変換
 97&emsp;fill = PatternFill(patternType='solid', fgColor=color_code)  # 水色の塗りつぶしを設定
 98&emsp;for row in ws['A1':'C1']:                   # 背景色を塗る
 99&emsp;  for cell in row:
100&emsp;    cell.fill = fill
101&emsp;
</code>
</pre>
<p>セル背景色の設定（水色 RGB値 赤=204、緑=255、青=255）<br />
95行目で 水色のRGB値を 変数 rgb にセットしています。</p>
<p>RGB値は、Excelの『書式』 - 『セルの書式設定』 - 『塗りつぶしタブ』 - 『その他の色(M)...』 - 『ユーザー設定タブ』で調べることができます。</p>
<p>96行目で RGB値から16進数カラーコードに変換しています。<br />
97行目で 水色の塗りつぶし（ patternType='solid' ）を設定しています。<br />
PatternFill() の引数 fgColor は、16進数カラーコードを指定する必要があります。<br />
16進数カラーコードが分かっている場合は、<br />
fill = PatternFill(patternType='solid', fgColor='CCFFFF')<br />
と記述できます。</p>
<p>98行目から100行目で A1セルからC1セルの背景色を設定しています。</p>
<p>背景色を設定するセルは、行番号と列番号を使って設定することもできます。<br />
 A1セル (行番号=1, 列番号=1)<br />
 C1セル (行番号=1, 列番号=3)</p>
<pre class="bluerayscode">
<code>
98&emsp;for row in ws.iter_rows(min_row = 1, max_row = 1, min_col = 1, max_col = 3):
</code>
</pre>
<p>・min_row：指定したい範囲の左上のセルの行番号<br />
・max_row：指定したい範囲の右下のセルの行番号<br />
・min_col：指定したい範囲の左上のセルの列番号<br />
・max_col：指定したい範囲の右下のセルの列番号</p>
<pre class="bluerayscode">
<code>
102&emsp;# セルの表示形式の設定
103&emsp;print("\n金額の列をカンマ編集にします")
104&emsp;for row in ws:
105&emsp;  for cell in row:
106&emsp;    col = cell.column                       # 列を取得
107&emsp;    if ws.cell(row = 1, column = col).value == "金額":
108&emsp;      cell.number_format = '#,##0'          # 書式を設定
109&emsp;
110&emsp;wb.save(file_name2)                         # ブックの保存
111&emsp;wb.close()                                  # ブックを閉じる
112&emsp;
113&emsp;#終了３
114&emsp;sys.exit()
</code>
</pre>
<p>セルの表示形式の設定（カンマ編集）<br />
107行目で 見出し（ヘッダ）の行（１行目）が "金額" の場合、<br />
108行目で 書式をカンマ編集（'#,##0'）に設定しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>７．セルに罫線を引く</h2>
<p><!--------------------------------><br />
ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** セルに罫線を引く ****

excel_file2.xlsxを開きます
罫線を引く方法を入力してください（1 or 2）>>>
</pre>
<p>&nbsp;<br />
キーボードから、1 を入力して、 <span class="keyboard-key"> Enter </span> キーを押下します。</p>
<p>エクスプローラから、excel_file2.xlsx を開いて内容を確認してください。<br />
値が入っていない A7セル と B7セル にも罫線が引かれています。</p>
<p>もう一度、コマンドプロンプト で practice16.py を実行します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** セルに罫線を引く ****

excel_file2.xlsxを開きます
罫線を引く方法を入力してください（1 or 2）>>>
</pre>
<p>&nbsp;<br />
キーボードから、2 を入力して、 <span class="keyboard-key"> Enter </span> キーを押下します。</p>
<p>エクスプローラから、excel_file2.xlsx を開いて内容を確認してください。<br />
値が入っているセルだけに罫線が引かれています。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
116&emsp;print("\n*** セルに罫線を引く ****")
117&emsp;
118&emsp;print("\nexcel_file2.xlsxを開きます")
119&emsp;wb = px.load_workbook(file_name2)           # ブックの読み込み
120&emsp;ws = wb['Sheet1']                           # Sheet1を選択
121&emsp;
122&emsp;side = Side(style='thin', color='000000')   # 細い罫線、線の色は黒
123&emsp;border = Border(top=side, bottom=side, left=side, right=side)  # 全ての辺に上記sideを設定
124&emsp;
</code>
</pre>
<p>罫線自体の設定<br />
122行目で 細い罫線、線の色は黒 を設定しています。<br />
123行目で セルの全ての辺に 細い罫線、線の色は黒 を設定しています。</p>
<pre class="bluerayscode">
<code>
125&emsp;select = input('罫線を引く方法を入力してください（1 or 2）>>> ')  # 値を入力
126&emsp;
127&emsp;if select == "1":
128&emsp;  print("\n罫線を引きます")
129&emsp;  for row in ws:
130&emsp;    for cell in row:
131&emsp;      ws[cell.coordinate].border = border   # 罫線を引く
</code>
</pre>
<p>罫線を引く<br />
129行目から131行目で 表の全てのセルに罫線を引いています。</p>
<pre class="bluerayscode">
<code>
132&emsp;else:
133&emsp;  print("\n値が入っているセルに罫線を引きます")
134&emsp;  for row in ws:
135&emsp;    for cell in row:
136&emsp;      if ws[cell.coordinate].value:         # セルに値が入っていない場合は None
137&emsp;        ws[cell.coordinate].border = border # 罫線を引く
138&emsp;
139&emsp;wb.save(file_name2)                         # ブックの保存
140&emsp;wb.close()                                  # ブックを閉じる
141&emsp;
142&emsp;sys.exit()
</code>
</pre>
<p>値が入っているセルに罫線を引く<br />
136行目の if文 でセルに値が入っているかを確認して、値が入っている場合は、<br />
137行目で 罫線を引いています。</p>
<p>【参考】PatternFill() の引数の紹介</p>
<p>fgColor<br />
　セルの背景色を16進数カラーコードで指定します</p>
<p>bgColor<br />
　２色のパターンを使用する場合、16進数カラーコードで指定します</p>
<p>fill_type<br />
　塗りつぶし              ： "solid"</p>
<p>　２色のパターンを使用する場合、下記パターンの種類を設定します<br />
　75%灰色                 ： "darkGray"<br />
　50%灰色                 ： "mediumGray"<br />
　25%灰色                 ： "lightGray"<br />
　12.5%灰色               ： "gray125"<br />
　6.25%灰色               ： "gray0625"<br />
　横縞                    ： "darkHorizontal"<br />
　縦縞                    ： "darkVertical"<br />
　右下がり斜線            ： "darkDown"<br />
　左下がり斜線 縞         ： "darkUp"<br />
　左下がり斜線 格子       ： "darkGrid"<br />
　極太線 左下がり斜線 格子： "darkTrellis"<br />
　実線 横縞               ： "lightHorizontal"<br />
　実線 縦縞               ： "lightVertical"<br />
　実線 右下がり斜線       ： "lightDown"<br />
　実線 左下がり斜線 縞    ： "lightUp"<br />
　実線 横 格子            ： "lightGrid"<br />
　実線 左下がり斜線 格子  ： "lightTrellis"</p>
<p>【参考】Side() の引数 style の紹介</p>
<p>style<br />
　極細            ： "hair"<br />
　通常の太さ      ： "thin"<br />
　通常と太線の中間： "medium"<br />
　太線            ： "thick"<br />
　二重線          ： "double"</p>
<p>　上記のほかに<br />
　　"dashDot"<br />
　　"dashDotDot"<br />
　　"dotted"<br />
　　"mediumDashDotDot"<br />
　　"dashed"<br />
　　"mediumDashed"<br />
　　"slantDashDot"<br />
　　"mediumDashDot"<br />
　があります。<br />
&nbsp;</p>
<table class="footerguide">
<tr>
<td class="fgleft">
<a style="text-decoration: none;" href="https://kotablog.pro/python-xlwings-excelfile/">＜xlwingsを使った Excelファイルの読み書き</a>
</td>
<td class="fgcenter">
openpyxlを使った Excelファイルの読み書き
</td>
<td class="fgright">
<a style="text-decoration: none;" href="https://kotablog.pro/python-operation-inifile/">iniファイルの読み書き＞</a>
</td>
</tr>
</table><p>The post <a href="https://kotablog.pro/python-openpyxl-excelfile/">openpyxlを使った Excelファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>xlwingsを使った Excelファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</title>
		<link>https://kotablog.pro/python-xlwings-excelfile/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-xlwings-excelfile</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 22:00:09 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1123</guid>

					<description><![CDATA[<p>Pythonのxlwingsライブラリを使ったExcelファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 ※本章はパソコンに Microsoft Excel がインストー [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-xlwings-excelfile/">xlwingsを使った Excelファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Pythonのxlwingsライブラリを使ったExcelファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
※本章はパソコンに Microsoft Excel がインストールされていることが前提です。<br />
<!---------------------------------------------------------------------></p>
<h2>１．xlwingsライブラリのインストール</h2>
<p>xlwings を使うには、事前にインストール作業が必要です。<br />
手順を追って説明します。<br />
<!--------------------------------></p>
<h3>① コマンドプロンプトを管理者として実行</h3>
<p>Windows画面の左下にある検索ボックスに、キーボードから cmd と入力します。<br />
右上に コマンドプロンプト が表示されていることを確認して、『管理者として実行』をクリックします。<br />
<div id="attachment_1115" style="width: 1034px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-1115" src="https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt.png" alt="コマンドプロンプトを管理者として実行" width="800" height="713" class="size-large wp-image-1115" srcset="https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt.png 1337w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-300x267.png 300w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-1024x913.png 1024w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-768x685.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1115" class="wp-caption-text">コマンドプロンプトを管理者として実行</p></div><br />
ユーザー アカウント制御 ダイアログボックスが表示されて、「このアプリがデバイスに変更を加えることを許可しますか？」と聞いてくるので、『はい』をクリックします。<br />
管理者：コマンドプロンプト が起動します。</p>
<pre class="bluerays">
Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!--------------------------------></p>
<h3>② インストールされているライブラリの確認</h3>
<p>管理者：コマンドプロンプト でキーボードから pip list と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールされているライブラリの一覧が表示されます。<br />
xlwings がインストールされていないことを確認します。</p>
<pre class="bluerays">
Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>pip list
Package         Version
--------------- -----------
numpy           2.1.2
pandas          2.2.3
pip             24.2
python-dateutil 2.9.0.post0
pytz            2024.2
pywin32         307
six             1.16.0
tzdata          2024.2

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!--------------------------------></p>
<h3>③ xlwings のインストール</h3>
<p>管理者：コマンドプロンプト でキーボードから pip install xlwings と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
最後の行に『 Successfully installed 』と表示されれば、インストール完了です。</p>
<pre class="bluerays">
C:\Windows\System32>pip install xlwings
Collecting xlwings
  Downloading xlwings-0.33.1-cp312-cp312-win_amd64.whl.metadata (5.5 kB)
Requirement already satisfied: pywin32>=224 in c:\python\lib\site-packages (from xlwings) (307)
Downloading xlwings-0.33.1-cp312-cp312-win_amd64.whl (1.6 MB)
   ---------------------------------------- 1.6/1.6 MB 940.0 kB/s eta 0:00:00
Installing collected packages: xlwings
Successfully installed xlwings-0.33.1

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p>【補足】学校や会社内のパソコンをお使いの方へ<br />
pip install xlwings が失敗する場合があります。<br />
この場合は、インストールする際にプロキシサーバーの情報を渡す必要があります</p>
<p>プロキシサーバーの情報は、システム管理者に確認してください。<br />
・プロキシサーバー名<br />
・ポート番号</p>
<p>プロキシサーバーの情報を取得できましたら、xlwings のインストールは次のようにします。<br />
pip install --proxy="プロキシサーバー名:ポート番号" xlwings</p>
<p><!--------------------------------></p>
<h3>④ xlwings のインストールの確認</h3>
<p>管理者：コマンドプロンプト でキーボードから pip list と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールされているライブラリの一覧が表示されます。<br />
一覧に xlwings があることを確認します。</p>
<pre class="bluerays">
C:\Windows\System32>pip list
Package         Version
--------------- -----------
numpy           2.1.2
pandas          2.2.3
pip             24.2
python-dateutil 2.9.0.post0
pytz            2024.2
pywin32         307
six             1.16.0
tzdata          2024.2
xlwings         0.33.1

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!---------------------------------------------------------------------></p>
<h2>２．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice15.py ）とExcelファイル（ excel_file1.xlsm ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice15.py、excel_file1.xlsm を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice15-txt/'>practice15.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 6.14 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice15-txt/?wpdmdl=1121&refresh=69d4552f17dc61775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/xlsm.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/excel_file1-xlsm/'>excel_file1.xlsm</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 14.15 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/excel_file1-xlsm/?wpdmdl=1122&refresh=69d4552f1861b1775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>３．ソースコードの表示とExcelファイルの内容の確認</h2>
<p>メモ帳を使って、演習用プログラム（ practice15.py ）を開きます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/notepad-practice15.png" alt="practice15.py" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice15.py</p></div><br />
Excelファイル（ excel_file1.xlsm ）の内容を確認します。<br />
excel_file1.xlsm は マクロ（ Macro1 ）を含みます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/practice15-excel_file1.png" alt="excel_file1.xlsm" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">excel_file1.xlsm</p></div><br />
<!---------------------------------------------------------------------></p>
<h2>４．Excelファイルの読み込み</h2>
<p>最初に xlwingsライブラリ を使って、Excelファイルを読み込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① Excelファイルを読み込む</h3>
<p>まずは、コマンドプロンプト で practice15.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">C:\Users\kotablog>python C:\Python\practice15.py

*** Excelファイルの読み込み ****

excel_file1.xlsmを開きます

A1セルのデータを取得します
商品コード

１行２列目のデータを取得します
商品名

B1セルからC2セルのデータを取得します
[['商品名', '金額'], ['みかん', 100.0]]
[['商品名', '金額'], ['みかん', 100.0]]

A1セルから行方向にデータを取得します
['商品コード', '商品名', '金額']
['商品コード', '商品名', '金額']

C1セルから列方向にデータを取得します
['金額', 100.0]
['金額', 100.0]

A1セルを左上とする表形式のデータを取得します
[['商品コード', '商品名', '金額'], ['A0001', 'みかん', 100.0]]
[['商品コード', '商品名', '金額'], ['A0001', 'みかん', 100.0]]
</pre>
<p>&nbsp;<br />
プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
01&emsp;# -*- coding: utf-8 -*-
02&emsp;"""
03&emsp;演習プログラム１５
04&emsp;
05&emsp;  xlwingsを使った Excelファイルの読み書き
06&emsp;
07&emsp;"""
08&emsp;import sys            # sysモジュールのインポート
09&emsp;import xlwings as xw  # Excelファイルアクセス用
10&emsp;
11&emsp;print("\n*** Excelファイルの読み込み ****")
12&emsp;
13&emsp;# Excelファイルを開く
14&emsp;print("\nexcel_file1.xlsmを開きます")
15&emsp;file_name1 = r"C:\Python\excel_file1.xlsm"  # ファイルのフルパス名
16&emsp;app_excel = xw.App(visible=True)            # Excelの画面を表示する
17&emsp;#app_excel = xw.App(visible=False)          # Excelの画面を表示しない
18&emsp;
19&emsp;wb = xw.Book(file_name1)                    # ブックを開く
20&emsp;wb.activate()                               # ブックをアクティブにする
21&emsp;ws = xw.sheets["Sheet1"]                    # Sheet1を選択
22&emsp;ws.activate()                               # シートをアクティブにする
23&emsp;
</code>
</pre>
<p>Excelファイルを開く<br />
09行目で xlwingsライブラリをインポートしています。このときライブラリ名を xw に設定しています。<br />
15行目で 変数 file_name1 に excel_file1.xlsm のフルパスファイル名をセットしています。<br />
16行目と17行目では、Excelの画面を表示するかしないかを設定しています。<br />
App()メソッドの引数 visible が True の場合は表示する、False の場合は表示しません。<br />
規定値は表示するになります。<br />
19行目で ブックを開き、21行目で "Sheet1" を選択しています。</p>
<pre class="bluerayscode">
<code>
24&emsp;# 単一セルの読み込み（セル番地でアクセス）
25&emsp;print("\nA1セルのデータを取得します")
26&emsp;print(xw.Range("A1").value)
27&emsp;
</code>
</pre>
<p>単一セルの読み込み（セル番地でアクセス）<br />
26行目で Range()メソッドの引数に、セル番地（今回は A1セル）を指定することで、そのセルの値を取得しています。</p>
<pre class="bluerayscode">
<code>
28&emsp;# 単一セルの読み込み（行番号、列番号でアクセス）
29&emsp;print("\n１行２列目のデータを取得します")
30&emsp;print(xw.Range((1, 2)).value)
31&emsp;
</code>
</pre>
<p>単一セルの読み込み（行番号、列番号でアクセス）<br />
30行目で Range()メソッドの引数に、行番号と列番号（今回は １行２列目）を指定することで、そのセルの値を取得しています。</p>
<pre class="bluerayscode">
<code>
32&emsp;# セル範囲の読み込み
33&emsp;print("\nB1セルからC2セルのデータを取得します")
34&emsp;print(xw.Range("B1:C2").value)
35&emsp;print(xw.Range((1, 2),(2, 3)).value)
36&emsp;
</code>
</pre>
<p>セル範囲の読み込み<br />
34行目で Range()メソッドの引数に、セル範囲をセル番号（今回は B1:C2）で指定すると、そのセル範囲の値をリストで取得できます。<br />
B1セルは、行番号が 1 で 列番号が 2、C2セルは、行番号が 2 で 列番号が 3 になります。<br />
35行目で Range()メソッドの引数に、セル範囲を行番号と列番号で指定すると、そのセル範囲の値をリストで取得できます。</p>
<pre class="bluerayscode">
<code>
37&emsp;# 行方向に読み込み
38&emsp;print("\nA1セルから行方向にデータを取得します")
39&emsp;print(xw.Range("A1").expand('right').value)
40&emsp;print(xw.Range((1, 1)).expand('right').value)
41&emsp;
</code>
</pre>
<p>行方向に読み込み<br />
39行目では expand('right') を指定することで、開始セル（今回は A1セル）から行方向（右方向）のセルの値をリストで取得できます。<br />
40行目は 開始セルを行番号と列番号で指定する方法です。</p>
<pre class="bluerayscode">
<code>
42&emsp;# 列方向に読み込み
43&emsp;print("\nC1セルから列方向にデータを取得します")
44&emsp;print(xw.Range("C1").expand('down').value)
45&emsp;print(xw.Range((1, 3)).expand('down').value)
46&emsp;
</code>
</pre>
<p>列方向に読み込み<br />
44行目では expand('down') を指定することで、開始セル（今回は C1セル）から列方向（下方向）のセルの値をリストで取得できます。<br />
45行目は 開始セルを行番号と列番号で指定する方法です。</p>
<pre class="bluerayscode">
<code>
47&emsp;# 表形式のデータを読み込み
48&emsp;print("\nA1セルを左上とする表形式のデータを取得します")
49&emsp;print(xw.Range("A1").expand('table').value)
50&emsp;print(xw.Range((1, 1)).expand('table').value)
51&emsp;
</code>
</pre>
<p>表形式のデータを読み込み<br />
49行目では expand('table') を指定することで、左上セル（今回は A1セル）から表形式のセルの値をリストで取得できます。<br />
50行目は 左上セルを行番号と列番号で指定する方法です。</p>
<pre class="bluerayscode">
<code>
52&emsp;# Excelファイルを閉じる
53&emsp;wb.close()                                  # ブックを閉じる
54&emsp;app_excel.kill()                            # オブジェクトを廃棄
55&emsp;
56&emsp;#終了１
57&emsp;sys.exit()
</code>
</pre>
<p>Excelファイルを閉じる<br />
53行目の close()メソッドで、ブックを閉じています<br />
54行目の kill()メソッドで、Appオブジェクトを廃棄しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．Excelファイルの書き込み</h2>
<p>次に xlwingsライブラリ を使って、Excelファイルに書き込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① Excelファイルに書き込む</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** Excelファイルに書き込み ****

excel_file1.xlsmを開きます

A3セルにデータを書き込みます（A0002）

３行２列目のセルにデータを書き込みます（メロン）

A4セルから行方向にデータを書き込みます（A0003, いちご）

C3セルから列方向にデータを書き込みます（200, 300）

A5セルから表形式のデータを書き込みます（A0004,バナナ, 400、A0005,レモン,500）
</pre>
<p>&nbsp;</p>
<p>エクスプローラから、excel_file2.xlsm を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
59&emsp;print("\n*** Excelファイルに書き込み ****")
60&emsp;
61&emsp;print("\nexcel_file1.xlsmを開きます")
62&emsp;app_excel = xw.App(visible=True)            # Excelの画面を表示する
63&emsp;#app_excel = xw.App(visible=False)          # Excelの画面を表示しない
64&emsp;
65&emsp;wb = xw.Book(file_name1)                    # ブックを開く
66&emsp;wb.activate()                               # ブックをアクティブにする
67&emsp;ws = xw.sheets["Sheet1"]                    # Sheet1を選択
68&emsp;ws.activate()                               # シートをアクティブにする
69&emsp;
70&emsp;# 単一セルに書き込み（セル番地でアクセス）
71&emsp;print("\nA3セルにデータを書き込みます（A0002）")
72&emsp;xw.Range("A3").value = "A0002"
73&emsp;
</code>
</pre>
<p>単一セルに書き込み（セル番地でアクセス）<br />
71行目で Range()メソッドの引数に、セル番地（今回は A3セル）を指定して、そのセルに "A0002" をセットしています。</p>
<pre class="bluerayscode">
<code>
74&emsp;# 単一セルの書き込み（行番号、列番号でアクセス）
75&emsp;print("\n３行２列目のセルにデータを書き込みます（メロン）")
76&emsp;xw.Range((3, 2)).value = "メロン"
77&emsp;
</code>
</pre>
<p>単一セルの書き込み（行番号、列番号でアクセス）<br />
76行目で Range()メソッドの引数に、行番号と列番号（今回は ３行２列目）を指定して、そのセルに "メロン" をセットしています。</p>
<pre class="bluerayscode">
<code>
78&emsp;# 行方向に書き込み
79&emsp;print("\nA4セルから行方向にデータを書き込みます（A0003, いちご）")
80&emsp;xw.Range("A4").value   = ["A0003", "いちご"]
81&emsp;xw.Range((4, 1)).value = ["A0003", "いちご"]
82&emsp;
</code>
</pre>
<p>行方向に書き込み<br />
80行目で Range()メソッドの引数に、セル番地（今回は A4セル）を指定して、リストを設定すると行方向のセルに値がセットされます。<br />
81行目は Range()メソッドの引数に、セルを行番号と列番号で指定する方法です。</p>
<pre class="bluerayscode">
<code>
83&emsp;# 列方向に書き込み
84&emsp;print("\nC3セルから列方向にデータを書き込みます（200, 300）")
85&emsp;xw.Range("C3",   transpose=True).value = [200, 300]
86&emsp;xw.Range((3, 3), transpose=True).value = [200, 300]
87&emsp;
</code>
</pre>
<p>列方向に書き込み<br />
85行目で Range()メソッドの第二引数に、transpose=True を指定すると、列方向のセルに値がセットされます。<br />
86行目は Range()メソッドの引数に、セルを行番号と列番号で指定する方法です。</p>
<pre class="bluerayscode">
<code>
88&emsp;# 表形式で書き込み
89&emsp;print("\nA5セルから表形式のデータを書き込みます（A0004,バナナ, 400、A0005,レモン,500）")
90&emsp;xw.Range("A5").value   = [["A0004", "バナナ", 400],["A0005", "レモン", 500]]
91&emsp;xw.Range((5, 1)).value = [["A0004", "バナナ", 400],["A0005", "レモン", 500]]
92&emsp;
93&emsp;file_name2 = r"C:\Python\excel_file2.xlsm"  # ファイルのフルパス名
94&emsp;wb.save(file_name2)                         # ブックの保存
95&emsp;wb.close()                                  # ブックを閉じる
96&emsp;app_excel.kill()                            # オブジェクトを廃棄
97&emsp;
98&emsp;#終了２
99&emsp;sys.exit()
</code>
</pre>
<p>表形式で書き込み<br />
90行目で Range()メソッドの引数に、セル番地（今回は A5セル）を指定して、２次元リストを設定すると、セル番地を左上にして表形式に値がセットされます。<br />
91行目は Range()メソッドの引数に、セルを行番号と列番号で指定する方法です。</p>
<p><!---------------------------------------------------------------------></p>
<h2>６．Excelマクロの実行</h2>
<p><!--------------------------------></p>
<h3>① Excelマクロの実行</h3>
<p>excel_file2.xlsm には以下のマクロが含まれます。</p>
<pre class="bluerayscode">
<code>
Sub Macro1()
'
' Macro1 Macro
' 金額欄を合計するマクロ
'
' Keyboard Shortcut: Ctrl+m
'
  Dim rng As Range
  Set rng = Range("C2:C6")
  Range("C7") = WorksheetFunction.Sum(rng)
  Set rng = Nothing
End Sub
</code>
</pre>
<p>このマクロをPythonから実行します。</p>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** Excelマクロの実行 ****

excel_file2.xlsmを開きます

マクロ Macro1 を実行します

ブックを保存して閉じます
</pre>
<p>&nbsp;<br />
エクスプローラから、excel_file2.xlsm を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
101&emsp;print("\n*** Excelマクロの実行 ****")
102&emsp;
103&emsp;print("\nexcel_file2.xlsmを開きます")
104&emsp;app_excel = xw.App(visible=True)            # Excelの画面を表示する
105emsp;#app_excel = xw.App(visible=False)          # Excelの画面を表示しない
106&emsp;
107&emsp;wb = xw.Book(file_name2)                    # ブックを開く
108&emsp;wb.activate()                               # ブックをアクティブにする
109&emsp;ws = xw.sheets["Sheet1"]                    # Sheet1を選択
110&emsp;ws.activate()                               # シートをアクティブにする
111&emsp;
112&emsp;print("\nマクロ Macro1 を実行します")
113&emsp;macro = wb.macro('Macro1')                  # マクロを取得
114&emsp;macro()                                     # マクロを実行
115&emsp;
116&emsp;print("\nブックを保存して閉じます")
117&emsp;wb.save()                                   # ブックの保存
118&emsp;wb.close()                                  # ブックを閉じる
119&emsp;app_excel.kill()                            # オブジェクトを廃棄
120&emsp;
121&emsp;#終了３
122&emsp;sys.exit()
</code>
</pre>
<p>113行目で 実行したいマクロ名を設定しています。<br />
114行目で マクロを実行しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>７．セルの装飾</h2>
<p>本章では、セルの装飾として<br />
・セル背景色の設定<br />
・セルの表示形式の設定（カンマ編集）<br />
を行います。<br />
<!--------------------------------></p>
<h3>① セルの装飾</h3>
<p>ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** セルの装飾 ****

excel_file2.xlsmを開きます

A1:C1のセル背景色を水色にします

C2からC7のセルの表示形式をカンマ編集にします

ブックを保存して閉じます
</pre>
<p>&nbsp;<br />
エクスプローラから、excel_file2.xlsm を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
124&emsp;print("\n*** セルの装飾 ****")
125&emsp;
126&emsp;print("\nexcel_file2.xlsmを開きます")
127&emsp;app_excel = xw.App(visible=True)            # Excelの画面を表示する
128&emsp;#app_excel = xw.App(visible=False)          # Excelの画面を表示しない
129&emsp;
130&emsp;wb = xw.Book(file_name2)                    # ブックを開く
131&emsp;wb.activate()                               # ブックをアクティブにする
132&emsp;ws = xw.sheets["Sheet1"]                    # Sheet1を選択
133&emsp;ws.activate()                               # シートをアクティブにする
134&emsp;
135&emsp;# セル背景色の設定
136&emsp;print("\nA1:C1のセル背景色を水色にします")
137&emsp;xw.Range("A1:C1").color = 204, 255, 255
138&emsp;
</code>
</pre>
<p>セル背景色の設定<br />
137行目の Range(セルもしくはセル範囲).color に カラーコードをセットすることでセル背景色を設定しています。</p>
<pre class="bluerayscode">
<code>
139&emsp;# セルの表示形式の設定
140&emsp;print("\nC2からC7のセルの表示形式をカンマ編集にします")
141&emsp;xw.Range("C2:C7").number_format = '#,##0'
142&emsp;
143&emsp;print("\nブックを保存して閉じます")
144&emsp;wb.save()                                   # ブックの保存
145&emsp;wb.close()                                  # ブックを閉じる
146&emsp;app_excel.kill()                            # オブジェクトを廃棄
147&emsp;
148&emsp;sys.exit()
</code>
</pre>
<p>セルの表示形式の設定<br />
141行目の Range(セルもしくはセル範囲).number_format に表示形式を表す文字列をセットしています。<br />
&nbsp;</p>
<table class="footerguide">
<tr>
<td class="fgleft">
<a style="text-decoration: none;" href="https://kotablog.pro/python-operation-csvfile/">＜ＣＳＶファイルの読み書き</a>
</td>
<td class="fgcenter">
xlwingsを使った Excelファイルの読み書き
</td>
<td class="fgright">
<a style="text-decoration: none;" href="https://kotablog.pro/python-openpyxl-excelfile/">openpyxlを使った Excelファイルの読み書き＞</a>
</td>
</tr>
</table><p>The post <a href="https://kotablog.pro/python-xlwings-excelfile/">xlwingsを使った Excelファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ＣＳＶファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</title>
		<link>https://kotablog.pro/python-operation-csvfile/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-operation-csvfile</link>
		
		<dc:creator><![CDATA[こたろう]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 21:52:31 +0000</pubDate>
				<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://kotablog.pro/?p=1109</guid>

					<description><![CDATA[<p>PythonでＣＳＶファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。 １．pandasライブラリのインストール 本章の最後で、pandasライブラリの紹介をします。 pa [&#8230;]</p>
<p>The post <a href="https://kotablog.pro/python-operation-csvfile/">ＣＳＶファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>PythonでＣＳＶファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。<br />
<!---------------------------------------------------------------------></p>
<h2>１．pandasライブラリのインストール</h2>
<p>本章の最後で、pandasライブラリの紹介をします。<br />
pandas とは、データ解析を容易にする機能を提供するPythonのデータ解析ライブラリです。<br />
ＣＳＶファイルや、Excelファイルのような表形式データを扱うときにもとても便利なライブラリです。<br />
pandas を使うには、事前にインストール作業が必要です。<br />
手順を追って説明します。<br />
<!--------------------------------></p>
<h3>① コマンドプロンプトを管理者として実行</h3>
<p>Windows画面の左下にある検索ボックスに、キーボードから cmd と入力します。<br />
右上に コマンドプロンプト が表示されていることを確認して、『管理者として実行』をクリックします。<br />
<div id="attachment_1115" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-1115" src="https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt.png" alt="" width="800" height="713" class="size-medium wp-image-1115" srcset="https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt.png 1337w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-300x267.png 300w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-1024x913.png 1024w, https://kotablog.pro/wp-content/uploads/2024/10/Start_command_prompt-768x685.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1115" class="wp-caption-text">コマンドプロンプトを管理者として実行</p></div><br />
ユーザー アカウント制御 ダイアログボックスが表示されて、「このアプリがデバイスに変更を加えることを許可しますか？」と聞いてくるので、『はい』をクリックします。<br />
管理者：コマンドプロンプト が起動します。</p>
<pre class="bluerays">
Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!--------------------------------></p>
<h3>② インストールされているライブラリの確認</h3>
<p>管理者：コマンドプロンプト でキーボードから pip list と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールされているライブラリの一覧が表示されます。<br />
pandas がインストールされていないことを確認します。</p>
<pre class="bluerays">
Microsoft Windows [Version 10.0.22631.4317]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>pip list
Package Version
------- -------
pip     24.2
pywin32 307

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!--------------------------------></p>
<h3>③ pandas のインストール</h3>
<p>管理者：コマンドプロンプト でキーボードから pip install pandas と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールには少々時間がかかります。<br />
最後の行に『 Successfully installed 』と表示されれば、インストール完了です。</p>
<pre class="bluerays">
C:\Windows\System32>pip install pandas
Collecting pandas
  Downloading pandas-2.2.3-cp312-cp312-win_amd64.whl.metadata (19 kB)
Collecting numpy>=1.26.0 (from pandas)
  Using cached numpy-2.1.2-cp312-cp312-win_amd64.whl.metadata (59 kB)
Collecting python-dateutil>=2.8.2 (from pandas)
  Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting pytz>=2020.1 (from pandas)
  Using cached pytz-2024.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting tzdata>=2022.7 (from pandas)
  Downloading tzdata-2024.2-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas)
  Using cached six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)
Downloading pandas-2.2.3-cp312-cp312-win_amd64.whl (11.5 MB)
   ---------------------------------------- 11.5/11.5 MB 1.4 MB/s eta 0:00:00
Using cached numpy-2.1.2-cp312-cp312-win_amd64.whl (12.6 MB)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Using cached pytz-2024.2-py2.py3-none-any.whl (508 kB)
Downloading tzdata-2024.2-py2.py3-none-any.whl (346 kB)
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: pytz, tzdata, six, numpy, python-dateutil, pandas
Successfully installed numpy-2.1.2 pandas-2.2.3 python-dateutil-2.9.0.post0 pytz-2024.2 six-1.16.0 tzdata-2024.2

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p>【補足】学校や会社内のパソコンをお使いの方へ<br />
pip install pandas が失敗する場合があります。<br />
この場合は、インストールする際にプロキシサーバーの情報を渡す必要があります</p>
<p>プロキシサーバーの情報は、システム管理者に確認してください。<br />
・プロキシサーバー名<br />
・ポート番号</p>
<p>プロキシサーバーの情報を取得できましたら、pandas のインストールは次のようにします。<br />
pip install --proxy="プロキシサーバー名:ポート番号" pandas</p>
<p><!--------------------------------></p>
<h3>④ pandas のインストールの確認</h3>
<p>管理者：コマンドプロンプト でキーボードから pip list と入力して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
インストールされているライブラリの一覧が表示されます。<br />
一覧に pandas があることを確認します。</p>
<pre class="bluerays">
C:\Windows\System32>pip list
Package         Version
--------------- -----------
numpy           2.1.2
pandas          2.2.3
pip             24.2
python-dateutil 2.9.0.post0
pytz            2024.2
pywin32         307
six             1.16.0
tzdata          2024.2

C:\Windows\System32>
</pre>
<p>&nbsp;</p>
<p><!---------------------------------------------------------------------></p>
<h2>２．演習用プログラムのダウンロード</h2>
<p>演習用プログラム（ practice14.py ）とＣＳＶファイル（ csv_file1.csv ）をダウンロードします。<br />
演習用プログラムは <b>テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更</b>します。<br />
practice14.py、csv_file1.csv を Python をインストールしたフォルダ（今回は C:\Python）に置きます。<br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/txt.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/practice14-txt/'>practice14.txt</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 5.92 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/practice14-txt/?wpdmdl=1107&refresh=69d4552f1b7321775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://kotablog.pro/wp-content/plugins/download-manager/assets/file-type-icons/csv.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://kotablog.pro/download/csv_file1-csv/'>csv_file1.csv</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 0.14 KB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary ' rel='nofollow' href='#' data-downloadurl="https://kotablog.pro/download/csv_file1-csv/?wpdmdl=1108&refresh=69d4552f1bf611775523119">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div><br />
<!---------------------------------------------------------------------></p>
<h2>３．ソースコードの表示</h2>
<p>メモ帳を使って、演習用プログラム（ practice14.py ）を開きます。<br />
<div id="attachment_543" style="width: 810px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-543" src="https://kotablog.pro/wp-content/uploads/2024/10/notepad-practice14.png" alt="practice14.py" width="800" height="600" class="size-medium wp-image-543" /><p id="caption-attachment-543" class="wp-caption-text">practice14.py</p></div><br />
<!---------------------------------------------------------------------></p>
<h2>４．ＣＳＶファイルの読み込み</h2>
<p>最初にＣＳＶファイルを読み込む方法を見ていきます。<br />
<!--------------------------------></p>
<h3>① ＣＳＶファイルを読み込む</h3>
<p>まずは、コマンドプロンプト で practice14.py を実行します。<br />
プログラムを実行する方法は、こちらの記事『<a title="ファイルに保存されたプログラムの実行" href="https://kotablog.pro/python373-create-sourse/#toc2">ファイルに保存されたプログラムの実行</a>』を参照します。<br />
以下のように表示されます。</p>
<pre class="bluerays">C:\Users\kotablog>python C:\Python\practice14.py

*** ＣＳＶファイルの読み込み ****

csv_file1.csvを読み込みます
['商品コード', '商品名', '金額']
['A0001', 'みかん', '100']
['A0002', 'メロン', '200']
['A0003', 'いちご', '300']
['A0004', 'バナナ', '400']
['A0005', 'トマト', '500']
</pre>
<p>&nbsp;<br />
プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
01&emsp;# -*- coding: utf-8 -*-
02&emsp;"""
03&emsp;演習プログラム１４
04&emsp;
05&emsp;  ＣＳＶファイルの読み書き
06&emsp;
07&emsp;"""
08&emsp;import sys     # sysモジュールのインポート
09&emsp;import csv     # ＣＳＶファイルの読み書き用の標準ライブラリ
10&emsp;import pandas  # pandasライブラリのインポート
11&emsp;
12&emsp;print("\n*** ＣＳＶファイルの読み込み ****")
13&emsp;
14&emsp;# ＣＳＶファイルを読み込む
15&emsp;print("\ncsv_file1.csvを読み込みます")
16&emsp;file_name = r"C:\Python\csv_file1.csv"  # ファイルのフルパス名
17&emsp;with open(file_name) as f:              # ファイルを開く
18&emsp;  reader = csv.reader(f)                # ＣＳＶファイルの読み込み
19&emsp;  for row in reader:                    # 行ごとのデータをリストで取得
20&emsp;    print(row)                          # １行のデータを表示
21&emsp;
22&emsp;#終了１
23&emsp;sys.exit()
</code>
</pre>
<p>09行目で ＣＳＶファイルを読み書きするための標準ライブラリをインポートしています。<br />
10行目で 先ほどインストールした pandasライブラリをインポートしています。</p>
<p>16行目で変数 file_name に csv_file1.csv のフルパスファイル名をセットしています。<br />
17行目で with文を使って、ＣＳＶファイルを開いています。<br />
18行目で reader()メソッドを使ってＣＳＶファイルを読み込み、reader オブジェクトに格納しています。<br />
19行目の for文を使って、行ごとにデータを取り出しています。<br />
20行目で 行のデータ（リスト）を表示しています。</p>
<p><!--------------------------------></p>
<h3>② ２次元リスト（リストのリスト）として取得</h3>
<p>ソースコード <b>#終了１</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
２次元リスト（リストのリスト）として取得します
[['商品コード', '商品名', '金額'], 
 ['A0001', 'みかん', '100'], 
 ['A0002', 'メロン', '200'], 
 ['A0003', 'いちご', '300'], 
 ['A0004', 'バナナ', '400'], 
 ['A0005', 'トマト', '500']]
</pre>
<p>&nbsp;<br />
※見やすくするために改行しています</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
25&emsp;# ２次元リスト（リストのリスト）として取得（リスト内包表記を使用）
26&emsp;print("\n２次元リスト（リストのリスト）として取得します")
27&emsp;with open(file_name) as f:              # ファイルを開く
28&emsp;  reader = csv.reader(f)                # ＣＳＶファイルの読み込み
29&emsp;  list2d = [row for row in reader]      # ２次元リストで取得
30&emsp;print(list2d)                           # ２次元リストを表示
31&emsp;
32&emsp;#終了２
33&emsp;sys.exit()
</code>
</pre>
<p>28行目で reader()メソッドを使ってＣＳＶファイルを読み込み、reader オブジェクトに格納しています。<br />
29行目で リスト内包表記を使って、reader オブジェクトから２次元リストとして変数 list2d に格納しています。<br />
30行目で ２次元リストを表示しています。</p>
<p><a style="text-decoration: none;" href="https://note.nkmk.me/python-list-comprehension/">Pythonリスト内包表記の使い方</a></p>
<p><!--------------------------------></p>
<h3>③ 数値にできるものだけを数値化</h3>
<p>金額の列は数値です。数値の文字列は数値に変換しておくと便利です。</p>
<p>ソースコード <b>#終了２</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
数値にできるものだけを数値化します
[['商品コード', '商品名', '金額'], 
 ['A0001', 'みかん', 100], 
 ['A0002', 'メロン', 200], 
 ['A0003', 'いちご', 300], 
 ['A0004', 'バナナ', 400], 
 ['A0005', 'トマト', 500]]
</pre>
<p>&nbsp;<br />
※見やすくするために改行しています</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
35&emsp;# 数値にできるものだけを数値化（リスト内包表記と三項演算子を使用）
36&emsp;print("\n数値にできるものだけを数値化します")
37&emsp;list2d = [[int(v) if v.isdecimal() else v for v in row ] for row in list2d]  # 数値化
38&emsp;print(list2d)                           # ２次元リストを表示
39&emsp;
40&emsp;#終了３
41&emsp;sys.exit()
</code>
</pre>
<p>37行目で リスト内包表記 と 三項演算子を使って数値にできる要素を数値に変換しています。</p>
<p>リスト内包表記<br />
[式 for 任意の変数名 in イテラブルオブジェクト]</p>
<p>三項演算子<br />
条件式が真のときに返す値 if 条件式 else 条件式が偽のときに返す値</p>
<p><!--------------------------------></p>
<h3>④ 見出し行（ヘッダー）を取り除く</h3>
<p>見出し行を取り除いてデータだけにしておくと便利です。</p>
<p>ソースコード <b>#終了３</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
見出し行（ヘッダー）を取り除きます
[['A0001', 'みかん', 100], 
 ['A0002', 'メロン', 200], 
 ['A0003', 'いちご', 300], 
 ['A0004', 'バナナ', 400], 
 ['A0005', 'トマト', 500]]
</pre>
<p>&nbsp;<br />
※見やすくするために改行しています</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
43&emsp;# 見出し行（ヘッダー）を取り除く（リスト内包表記を使用）
44&emsp;print("\n見出し行（ヘッダー）を取り除きます")
45&emsp;list2d = [row for row in list2d[1:]]    # ヘッダーの除去
46&emsp;print(list2d)                           # ２次元リストを表示
47&emsp;
48&emsp;#終了４
49&emsp;sys.exit()
</code>
</pre>
<p>45行目で 見出し行は１行目（インデックスは 0）なので、２行目以降（インデックスは 1）で２次元リストを作成しています。（リスト内包表記）</p>
<p><!--------------------------------></p>
<h3>⑤ 行、要素、列を取得</h3>
<p>ソースコード <b>#終了４</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
３行目を取得します
['A0003', 'いちご', 300]

３行目の２列目を取得します
いちご

３列目（金額）を取得します
[100, 200, 300, 400, 500]

金額の合計を計算します
合計は 1500 です
</pre>
<p>&nbsp;<br />
プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
51&emsp;# 行を取得
52&emsp;print("\n３行目を取得します")
53&emsp;datalist = list2d[2]                    # 0始まりのインデックスを指定
54&emsp;print(datalist)                         # 行のリストを表示
55&emsp;
56&emsp;# 要素を取得
57&emsp;print("\n３行目の２列目を取得します")
58&emsp;data = list2d[2][1]                     # [行][列]の順で指定
59&emsp;print(data)                             # 要素を表示
60&emsp;
61&emsp;# 列を取得
62&emsp;print("\n３列目（金額）を取得します")
63&emsp;list2d_T = [list(x) for x in zip(*list2d)]  # 行と列を入れ替え
64&emsp;datalist = list2d_T[2]                  # 0始まりのインデックスを指定
65&emsp;print(datalist)
66&emsp;
67&emsp;print("\n金額の合計を計算します")
68&emsp;total = sum(datalist)                   # リストの要素の合計値を計算
69&emsp;print("合計は、" + str(total) + " です")
70&emsp;
71&emsp;#終了５
72&emsp;sys.exit()
</code>
</pre>
<p>行を取得（３行目）<br />
53行目で ２次元リスト（ list2d ）から、３行目のデータ（インデックスは 2）を取り出しています。</p>
<p>要素を取得（３行目の２列目）<br />
58行目で ２次元リスト（ list2d ）から、３行目のデータ（インデックスは 2）さらに ２列目の要素（インデックスは 1）を取り出しています。</p>
<p>列を取得（３列目の金額）<br />
列を取得するにはまず行と列を入れ替えます。<br />
63行目で リスト内包表記を使い、行と列を入れ替えて２次元リスト（ list2d_T ）に格納しています。</p>
<p>list2d_T の内容<br />
[['A0001', 'A0002', 'A0003', 'A0004', 'A0005'],<br />
 ['みかん', 'メロン', 'いちご', 'バナナ', 'トマト'],<br />
 [100, 200, 300, 400, 500]]</p>
<p>64行目で ２次元リスト（ list2d_T ）から、行と列を入れ替えているので３行目のデータ（インデックスは 2）を取り出しています。</p>
<p>金額の合計を計算<br />
68行目で sum()関数を使って金額のリストの要素を合計しています。</p>
<p><!---------------------------------------------------------------------></p>
<h2>５．ＣＳＶファイルの書き込み</h2>
<p><!--------------------------------></p>
<h3>① ＣＳＶファイルに１行ずつ書き込む</h3>
<p>ソースコード <b>#終了５</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** ＣＳＶファイルの書き込み ****

csv_file2.csvに１行ずつ書き込みます
csv_file2.csv の内容を確認しましょう
</pre>
<p>&nbsp;<br />
エクスプローラから、csv_file2.csv を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
74&emsp;print("\n*** ＣＳＶファイルの書き込み ****")
75&emsp;
76&emsp;# ＣＳＶファイルに１行ずつ書き込む
77&emsp;print("\ncsv_file2.csvに１行ずつ書き込みます")
78&emsp;file_name = r"C:\Python\csv_file2.csv"  # ファイルのフルパス名
79&emsp;with open(file_name, 'w', newline="") as f:  # 書き込みモードでファイルを開く
80&emsp;  writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
81&emsp;  writer.writerow(['商品コード', '商品名', '金額'])
82&emsp;  writer.writerow(['A0001', 'みかん', 100])
83&emsp;print("csv_file2.csv の内容を確認しましょう")
84&emsp;
85&emsp;#終了６
86&emsp;sys.exit()
</code>
</pre>
<p>79行目で ＣＳＶファイルを書き込みモード（ 'w' ）で開いています。<br />
このとき、引数に newline="" を指定し忘れると、行毎に空行が入ってしまいます。</p>
<p>80行目の writer()メソッドの引数 quoting は以下の通りです。<br />
・quoting=csv.QUOTE_ALL　：　すべての要素が引用符で囲まれる。<br />
・quoting=csv.QUOTE_NONNUMERIC　：　数値でない要素が引用符で囲まれる。</p>
<p>81行目と82行目の writerow()メソッドで行のデータを書き込んでいます。</p>
<p><!--------------------------------></p>
<h3>② ＣＳＶファイルに２次元リストを書き込む</h3>
<p>ソースコード <b>#終了６</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
csv_file3.csvに２次元リストを書き込みます
csv_file3.csv の内容を確認しましょう
</pre>
<p>&nbsp;<br />
エクスプローラから、csv_file3.csv を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
 88&emsp;# ＣＳＶファイルに２次元リストを書き込む
 89&emsp;print("\ncsv_file3.csvに２次元リストを書き込みます")
 90&emsp;file_name = r"C:\Python\csv_file3.csv"  # ファイルのフルパス名
 91&emsp;list2d = [['商品コード', '商品名', '金額'],\
 92&emsp;          ['A0001', 'みかん', 100],\
 93&emsp;          ['A0002', 'メロン', 200],\
 94&emsp;          ['A0003', 'いちご', 300],\
 95&emsp;          ['A0004', 'バナナ', 400],\
 96&emsp;          ['A0005', 'トマト', 500]]
 97&emsp;with open(file_name, 'w', newline="") as f:  # 書き込みモードでファイルを開く
 98&emsp;  writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
 99&emsp;  writer.writerows(list2d)
100&emsp;print("csv_file3.csv の内容を確認しましょう")
101&emsp;
102&emsp;#終了７
103&emsp;sys.exit()
</code>
</pre>
<p>90行目で 変数 file_name に csv_file3.csv のフルパスファイル名をセットしています。</p>
<p>91行目から96行目で ＣＳＶファイルに書き込む２次元リストを用意しています。<br />
Pythonでは、行の末尾に \ を付けることで、コーディングを複数行に記述することができます。</p>
<p>97行目で ＣＳＶファイルを書き込みモード（ 'w' ）で開いています。<br />
引数の newline="" は、行毎に空行が入らないようにしています。</p>
<p>98行目で 数値でない要素が引用符で囲まれるように指定しています。</p>
<p>99行目の writerows()メソッドで複数行のデータを書き込んでいます。</p>
<p><!--------------------------------></p>
<h3>③ 追記モードでＣＳＶファイルに書き込む</h3>
<p>ソースコード <b>#終了７</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
csv_file3.csvにデータを追加します
csv_file3.csv の内容を確認しましょう
</pre>
<p>&nbsp;<br />
エクスプローラから、csv_file3.csv を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
105&emsp;# 追記モードでＣＳＶファイルに書き込む
106&emsp;print("\ncsv_file3.csvにデータを追加します")
107&emsp;with open(file_name, 'a', newline="") as f:  # 追記モードでファイルを開く
108&emsp;  writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
109&emsp;  writer.writerow(['A0006', 'ぶどう', 600])
110&emsp;print("csv_file3.csv の内容を確認しましょう")
111&emsp;
112&emsp;#終了８
113&emsp;sys.exit()
</code>
</pre>
<p>107行目で ＣＳＶファイルを追記モード（ 'a' ）で開いています。<br />
108行目で 数値でない要素が引用符で囲まれるように指定しています。<br />
109行目の writerow()メソッドで行のデータを書き込んでいます。</p>
<p><!--------------------------------></p>
<h3>④ ＣＳＶファイルのデータを修正する</h3>
<p>商品コード 'A0005' の商品名を 'トマト' から 'りんご' に修正します。</p>
<p>ソースコード <b>#終了８</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
csv_file3.csvのデータを修正します
csv_file3.csv の内容を確認しましょう
</pre>
<p>&nbsp;<br />
エクスプローラから、csv_file3.csv を開いて内容を確認してください。</p>
<p>プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
115&emsp;# ＣＳＶファイルのデータを修正する
116&emsp;print("\ncsv_file3.csvのデータを修正します")
117&emsp;with open(file_name) as f:              # ファイルを開く
118&emsp;  reader = csv.reader(f)                # ＣＳＶファイルの読み込み
119&emsp;  list2d = [row for row in reader]      # ２次元リストで取得
120&emsp;  list2d = [[int(v) if v.isdecimal() else v for v in row ] for row in list2d]  # 数値化
121&emsp;
122&emsp;for i in range(len(list2d)):
123&emsp;  datalist = list2d[i]
124&emsp;  if list2d[i][0] == "A0005":
125&emsp;    list2d[i][1] = "りんご"
126&emsp;
127&emsp;with open(file_name, 'w', newline="") as f:  # 書き込みモードでファイルを開く
128&emsp;  writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
129&emsp;  writer.writerows(list2d)
130&emsp;print("csv_file3.csv の内容を確認しましょう")
131&emsp;
132&emsp;#終了９
133&emsp;sys.exit()
</code>
</pre>
<p>117行目で csv_file3.csv を開いています。<br />
118行目から120行目で ファイルを読み込み、２次元リスト（ list2d ）に格納して、数値にできる要素を数値化しています。</p>
<p>122行目から125行目の for文で、商品コードが 'A0005' であれば 商品名を 'トマト' から 'りんご' に書き換えています。</p>
<p>127行目で ＣＳＶファイルを書き込みモード（ 'w' ）で開いています。<br />
引数の newline="" は、行毎に空行が入らないようにしています。<br />
129行目の writerows()メソッドで２次元リストのデータを書き込んでいます。</p>
<p><!---------------------------------------------------------------------></p>
<h2>６．pandasでのＣＳＶファイルの読み書き</h2>
<p><!--------------------------------></p>
<h3>① pandasを使ったＣＳＶファイルの修正</h3>
<p>pandasを使って、商品コード 'A0005' の商品名を 'りんご' から 'レモン' に修正します。</p>
<p>ソースコード <b>#終了９</b> の１行下の <b>sys.exit()</b> の先頭に「 # 」を入れてコメントにします。<br />
<span class="keyboard-key"> Ctrl </span> キーを押しながら、<span class="keyboard-key"> S </span> キーを押して、ソースコードを上書き保存します。<br />
コマンドプロンプトで<span class="keyboard-key"> F3 </span> キーを押して、<span class="keyboard-key"> Enter </span> キーを押下します。<br />
以下のように表示されます。</p>
<pre class="bluerays">
*** pandasでのＣＳＶファイルの読み書き ****

csv_file3.csvのデータをpandasを使って修正します

【修正前】
   商品コード  商品名   金額
0  A0001  みかん  100
1  A0002  メロン  200
2  A0003  いちご  300
3  A0004  バナナ  400
4  A0005  りんご  500
5  A0006  ぶどう  600

【修正後】
   商品コード  商品名   金額
0  A0001  みかん  100
1  A0002  メロン  200
2  A0003  いちご  300
3  A0004  バナナ  400
4  A0005  レモン  500
5  A0006  ぶどう  600

csv_file3.csv の内容を確認しましょう
</pre>
<p>&nbsp;<br />
プログラムソースを確認します。</p>
<pre class="bluerayscode">
<code>
135&emsp;print("\n*** pandasでのＣＳＶファイルの読み書き ****")
136&emsp;
137&emsp;# pandasを使ったＣＳＶファイルの修正
138&emsp;print("\ncsv_file3.csvのデータをpandasを使って修正します")
139&emsp;df = pandas.read_csv(file_name, encoding='shift_jis')
140&emsp;print("\n【修正前】")
141&emsp;print(df)
142&emsp;
143&emsp;for index, data in df.iterrows():
144&emsp;  商品コード = str(data['商品コード'])
145&emsp;  商品名     = str(data['商品名'])
146&emsp;  if 商品コード == "A0005":
147&emsp;    df.loc[index, '商品名'] = "レモン"
148&emsp;print("\n【修正後】")
149&emsp;print(df)
150&emsp;
151&emsp;df.to_csv(file_name, encoding='shift_jis', index=False)
152&emsp;print("\ncsv_file3.csv の内容を確認しましょう")
153&emsp;
154&emsp;sys.exit()
</code>
</pre>
<p>139行目で pandasの read_csv()メソッドで csv_file3.csv を読み込んで、データフレーム（ df ）にセットしています。<br />
143行目から147行目の for文で、商品コードが 'A0005' であれば 商品名を 'レモン' に書き換えています。<br />
151行目で pandasの to_csv()メソッドで csv_file3.csv に書き込んでいます。</p>
<p>pandasを使った方が、コーディングが簡潔になります。</p>
<p>pandasについては、別章で詳しく解説します。<br />
&nbsp;</p>
<table class="footerguide">
<tr>
<td class="fgleft">
<a style="text-decoration: none;" href="https://kotablog.pro/python-operation-textfile/">＜テキストファイルの読み書き</a>
</td>
<td class="fgcenter">
ＣＳＶファイルの読み書き
</td>
<td class="fgright">
<a style="text-decoration: none;" href="https://kotablog.pro/python-xlwings-excelfile/">xlwingsを使った Excelファイルの読み書き＞</a>
</td>
</tr>
</table><p>The post <a href="https://kotablog.pro/python-operation-csvfile/">ＣＳＶファイルの読み書き – 【Pythonプログラミング２ ～応用編～】</a> first appeared on <a href="https://kotablog.pro">kotablog.pro</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
