おや、python Pandasが1.0.1 になったようだ

Python

あんまり使えてなかったけど気づけば1.0.1になっていた。

(base) C:Usersken26>pip list -o | grep pandas
pandas                        0.24.2    1.0.1       wheel
pandas-datareader             0.7.4     0.8.1       wheel
pandas-profiling              2.3.0     2.5.0       sdist

早速アップします

pip install -U pandas

参照元

特徴

  • ユーザー側からすればあまり変更点は無い
  • しかしパフォーマンスがよくなっている
  • APIが強化、クリーンアップ、廃止された

pandas.pydata.org

最も重要な6つの改善点

1. 文字列とブーリアン

  • まだ実験的機能
  • 改善が見込まれる
  • 現状ではまだ文字列はブールを自動的に割り当ててはくれない様子

という事で、テスト用csvを用意して動作確認してみます

>>> import pandas as pd
>>> pd.__version__
'1.0.1'
>>>
>>> df = pd.read_csv('test.csv')
>>> df
id  name       date  num  num2   flag
0   1   ken  2004/12/7  200   1.2   True
1   2  taro   2001/8/2  300   0.5  False
2   3  hana   2002/3/3  400   5.2   True
>>>
>>> df.dtypes
id        int64
name     object
date     object
num       int64
num2    float64
flag       bool
dtype: object

今でも日付と文字列は object として扱っている。

>>> df['name'] = df['name'].astype('string')
>>>
>>> df.dtypes
id        int64
name     string
date     object
num       int64
num2    float64
flag       bool
dtype: object

しかし string を使えばこの2つは区別できる。

前は string ってなかったのか。これは良い事

2. select_dtypes

型を指定して列をフィルターする事ができる

>>> df.select_dtypes('string')
name
0   ken
1  taro
2  hana

これは便利。

3. pandas.NA

  • pandas.NA というものができたらしい
  • これも実験的機能
>>> df2 = pd.Series([1, 2, None], dtype="Int64")
>>> df2
0       1
1       2
2    <NA>
dtype: Int64
>>> df2[2] is pd.NA
True

4. .convert_dtypes()

  • 列の型を変更するメソッド
>>> df = pd.read_csv('test.csv')
>>> df.dtypes
id        int64
name     object
date     object
num       int64
num2    float64
flag       bool
dtype: object
>>> df.convert_dtypes().dtypes
id        Int64
name     string
date     string
num       Int64
num2    float64
flag    boolean
dtype: object

おぉ凄い。と思ったけど日付が文字列で bool は boolean になっている。

紛らわしい。でも便利。

5. .info()

  • info メソッドが改善されたとのこと

0.24.2

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 6 columns):
id      3 non-null int64
name    3 non-null object
date    3 non-null object
num     3 non-null int64
num2    3 non-null float64
flag    3 non-null bool
dtypes: bool(1), float64(1), int64(2), object(2)
memory usage: 203.0+ bytes

1.0.1

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 6 columns):
#   Column  Non-Null Count  Dtype
---  ------  --------------  -----
0   id      3 non-null      int64
1   name    3 non-null      object
2   date    3 non-null      object
3   num     3 non-null      int64
4   num2    3 non-null      float64
5   flag    3 non-null      bool
dtypes: bool(1), float64(1), int64(2), object(2)
memory usage: 251.0+ bytes

データが大きくなく複雑でもないから、タイトル行が増えたくらいしかわからないな。

6. .to_markdown()

  • tabulate に依存しているため、pip install tabulate が必要
>>> df.to_markdown()
'|    |   id | name   | date      |   num |   num2 | flag   |n|---:|-----:|:-------|:----------|------:|-------:|:-------|n|  0 |    1 | ken    | 2004/12/7 |   200 |    1.2 | True   |n|  1 |    2 | taro   | 2001/8/2  |   300 |    0.5 | False  |n|  2 |    3 | hana   | 2002/3/3  |   400 |    5.2 | True   |'
idnamedatenumnum2flag
01ken2004/12/72001.2True
12taro2001/8/23000.5False
23hana2002/3/34005.2True

はてなブログn が改行とは認識されなかったのですべて手動で改行する必要があった。

タイトルとURLをコピーしました