LoginSignup
2
4

More than 3 years have passed since last update.

(Python) DataFrame のappend 時に配列が1列の複数データで挿入される際の解決方

Last updated at Posted at 2019-08-30

問題:pandas.DataFrame にappend した行の配列データが、1列に複数のデータとして入る。

pandas.DataFrame のインスタンスに行を追加しようとした際、配列データをappend メソッドで追加すると、1列に複数のデータとして入るようでした。

sample.py
from pandas import DataFrame

dataFrame = DataFrame([
    ['a','b','c','d','e'],
    ['f','ggg','hhhh','ii','jjjjjjjj'],
])
appendedDataFrame = dataFrame.append(
    ['a','b','c','d','e']
)

print(appendedDataFrame)
出力結果.txt
   0    1     2    3         4
0  a    b     c    d         e
1  f  ggg  hhhh   ii  jjjjjjjj
0  a  NaN   NaN  NaN       NaN
1  b  NaN   NaN  NaN       NaN
2  c  NaN   NaN  NaN       NaN
3  d  NaN   NaN  NaN       NaN
4  e  NaN   NaN  NaN       NaN

新規の行が 0 - 5 までのindex で複数のデータとして挿入されましたが、本来は行として挿入するつもりだったため、配列を行として一行追加する方法を調査しました。

解決法:pandas.Series のインスタンスとして append する。

一度pandas.Series インスタンスに配列データを入れて、それをDataFrame の appendメソッドに渡すことで、期待するDataFrame になりました。(この時 pandas.Series の name が append した時の行の index 名となるようでした。)

sample.py
from pandas import DataFrame, Series

dataFrame = DataFrame([
    ['a','b','c','d','e'],
    ['f','ggg','hhhh','ii','jjjjjjjj'],
])
appendedDataFrame = dataFrame.append(
    Series(
        ['a','b','c','d','e'],
        name=2
    )
)

print(appendedDataFrame)

出力結果.txt
   0    1     2   3         4
0  a    b     c   d         e
1  f  ggg  hhhh  ii  jjjjjjjj
2  a    b     c   d         e

これで新たな行を DataFrame に挿入することができました。

Series には、name を設定するか、append メソッドに、igonore_index=True を設定する必要がある。

Series には、name(挿入する行のindex名)を指定しないと下記のエラーとなりました。

TypeError: Can only append a Series if ignore_index=True or if the Series has a name

Series には、name(挿入する行のindex名)を指定しない場合、これを回避するために、ignore_index=True を設定する必要があるようです。

sample.py
from pandas import DataFrame, Series

dataFrame = DataFrame([
    ['a','b','c','d','e'],
    ['f','ggg','hhhh','ii','jjjjjjjj'],
])
appendedDataFrame = dataFrame.append(
    Series(
        ['a','b','c','d','e'],
    ),
    ignore_index=True
)

print(appendedDataFrame)
出力結果.txt
   0    1     2   3         4
0  a    b     c   d         e
1  f  ggg  hhhh  ii  jjjjjjjj
2  a    b     c   d         e

以上です。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4