言語仕様的にはコメントや他の人の回答はごもっともでその通りだと思うんですけど,
あらかじめdf
にpd.read_csv()
の返り値と同じ型を設定しておくのは
エラーチェックをする上でも普通の考え方だと個人的には思います。
pythonの言語仕様としては
python
1import pandas as pd
2
3try:
4 df = pd.read_csv("test.csv")
5except Exception as e:
6 print(e)
7
8print(df)
とかしても df = pd.read_csv("test.csv")
で例外が発生しなければ
正常動作で通ってしまう,へんちくりんな感じになっています。
まぁ例外処理の時に簡単に記述できるからという理由も分かるのですが…
(上の例では例外発生時にexcept節内でdfを初期化することが可能という利点あり)
ここで
python
1import pandas as pd
2
3df = なにか
4
5try:
6 df = pd.read_csv("test.csv")
7except Exception as e:
8 print(e)
9
10print(df)
として,この「なにか」をpd.read_csv("test.csv")
の型と合わせたいところです。
pythonをインタライティブに実行して(元が古い環境なのでpython3で失礼します)
read_csv
のhelpを見ます。
$ python3
Python 3.9.7 (default, Sep 10 2021, 14:59:43)
[GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> help(pd.read_csv)
Help on function read_csv in module pandas.io.parsers:
...
Returns
-------
DataFrame or TextParser
A comma-separated values (csv) file is returned as two-dimensional
data structure with labeled axes.
...
返り値はDataFrame
かTextParser
のようです。実は私はTextParser
が返ってくる
条件を知りませんが,まぁDataFrame
が返ってくるんでしょう。
DataFrame
のヘルプを見てみます。
>>> help(pd.DataFrame)
Help on class DataFrame in module pandas.core.frame:
class DataFrame(pandas.core.generic.NDFrame)
| DataFrame(data=None, index: Optional[Collection] = None, columns: Optional[Collection] = None, dtype: Union[ForwardRef('ExtensionDtype'), str, numpy.dtype, Type[Union[str, float, int, complex, bool]], NoneType] = None, copy: bool = False)
...
クラスのようなので,まぁ引数なしのコンストラクタでもやっとけばサイズ0の
データフレームになりそうです。
確認してみます。
>>> df = pd.DataFrame()
>>> df
Empty DataFrame
Columns: []
Index: []
>>>
列も行の空のデータフレームっぽいです。
よって次のような流れでプログラムを書くことができるでしょう。
python
1import pandas as pd
2
3df = pd.DataFrame()
4
5try:
6 df = pd.read_csv("test.csv")
7except Exception as e:
8 print(e)
9
10# ここでdfに対してエラーチェックの処理
11