web-dev-qa-db-ja.com

pandasを使用して、データフレームに空の行を追加します

データフレームの最後に空の行を追加しようとしていますが、追加できません。pandasが追加機能でどのように機能するかを理解しようとしても、まだ取得できません。

コードは次のとおりです。

import pandas as pd

Excel_names = ["ARMANI+EMPORIO+AR0143-book.xlsx"]
excels = [pd.ExcelFile(name) for name in Excel_names]
frames = [x.parse(x.sheet_names[0], header=None,index_col=None).dropna(how='all') for x in excels]
for f in frames:
    f.append(0, float('NaN'))
    f.append(2, float('NaN'))

2つの列と行の乱数があります。

forループiで「print f」を使用して、これを取得します。

                             0                 1
0                   Brand Name    Emporio Armani
2                 Model number            AR0143
4                  Part Number            AR0143
6                   Item Shape       Rectangular
8   Dial Window Material Type           Mineral
10               Display Type          Analogue
12                 Clasp Type            Buckle
14               Case Material   Stainless steel
16              Case Diameter    31 millimetres
18               Band Material           Leather
20                 Band Length  Women's Standard
22                 Band Colour             Black
24                 Dial Colour             Black
26            Special Features       second-hand
28                    Movement            Quartz
18
Mansoor Akram

Pandas.DataFrame.append()を使用して、新しいpandas.Seriesを追加します。

新しい行の名前(別名「インデックス」)を指定する場合は、次を使用します。

df.append(pandas.Series(name='NameOfNewRow'))

新しい行に名前を付けたくない場合は、次を使用します。

df.append(pandas.Series(), ignore_index=True)

ここで、dfは、pandas.DataFrameです。

12
srcerer

次のようにデータフレームにシリーズを追加することで追加できます。空白とは、「Nan」のみを含む行を追加することを意味すると想定しています。まず、Nanを使用してSeriesオブジェクトを作成できます。 -Indexパラメーターで 'Series'オブジェクトを定義する際に、列を指定してください。 DFに追加できます。それが役に立てば幸い!

from numpy import nan as Nan
import pandas as pd

>>> df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
...                     'B': ['B0', 'B1', 'B2', 'B3'],
...                     'C': ['C0', 'C1', 'C2', 'C3'],
...                     'D': ['D0', 'D1', 'D2', 'D3']},
...                     index=[0, 1, 2, 3])

>>> s2 = pd.Series([Nan,Nan,Nan,Nan], index=['A', 'B', 'C', 'D'])
>>> result = df1.append(s2)
>>> result
     A    B    C    D
0   A0   B0   C0   D0
1   A1   B1   C1   D1
2   A2   B2   C2   D2
3   A3   B3   C3   D3
4  NaN  NaN  NaN  NaN
13
silent_dev

dfがデータフレームであると仮定すると、

df_prime = pd.concat([df, pd.DataFrame([[np.nan] * df.shape[1]], columns=df.columns)], ignore_index=True)

どこ df_primeは、NaNの最後の行が追加されたdfと等しくなります。

ご了承ください pd.concatは遅いので、この機能をループで使用する必要がある場合は、使用しないことをお勧めします。その場合、インデックスが増分であると仮定すると、使用できます

df.loc[df.iloc[-1].name + 1,:] = np.nan
3
Dave Reikher

新しいシリーズを追加し、同時に名前を付けることができます。名前は新しい行のインデックスになり、すべての値は自動的にNaNになります。

df.append(pd.Series(name='Afterthought'))
3
pocketdora

以下のコードは私のために働いた。

df.append(pd.Series([np.nan]), ignore_index = True)
2
kamal tanwar

Df.indexがソートされていると仮定すると、次を使用できます。

_df.loc[df.index.max() + 1] = None
_

さまざまなインデックスと列タイプを処理します。

[編集]一定の頻度がある場合、pd.DatetimeIndexで動作します。そうでない場合は、新しいインデックスを正確に指定する必要があります。例:

_df.loc[df.index.max() + pd.Timedelta(milliseconds=1)] = None
_

長い例:

_df = pd.DataFrame([[pd.Timestamp(12432423), 23, 'text_field']], 
                    columns=["timestamp", "speed", "text"],
                    index=pd.DatetimeIndex(start='2111-11-11',freq='ms', periods=1))
df.info()
_

<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 1 entries, 2111-11-11 to 2111-11-11 Freq: L Data columns (total 3 columns): timestamp 1 non-null datetime64[ns] speed 1 non-null int64 text 1 non-null object dtypes: datetime64[ns](1), int64(1), object(1) memory usage: 32.0+ bytes

_df.loc[df.index.max() + 1] = None
df.info()
_

<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 2 entries, 2111-11-11 00:00:00 to 2111-11-11 00:00:00.001000 Data columns (total 3 columns): timestamp 1 non-null datetime64[ns] speed 1 non-null float64 text 1 non-null object dtypes: datetime64[ns](1), float64(1), object(1) memory usage: 64.0+ bytes

_df.head()

                            timestamp                   speed      text
2111-11-11 00:00:00.000 1970-01-01 00:00:00.012432423   23.0    text_field
2111-11-11 00:00:00.001 NaT NaN NaN
_
1
Daniel R