データフレームの最後に空の行を追加しようとしていますが、追加できません。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
Pandas.DataFrame.append()を使用して、新しいpandas.Seriesを追加します。
新しい行の名前(別名「インデックス」)を指定する場合は、次を使用します。
df.append(pandas.Series(name='NameOfNewRow'))
新しい行に名前を付けたくない場合は、次を使用します。
df.append(pandas.Series(), ignore_index=True)
ここで、df
は、pandas.DataFrameです。
次のようにデータフレームにシリーズを追加することで追加できます。空白とは、「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
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
新しいシリーズを追加し、同時に名前を付けることができます。名前は新しい行のインデックスになり、すべての値は自動的にNaNになります。
df.append(pd.Series(name='Afterthought'))
以下のコードは私のために働いた。
df.append(pd.Series([np.nan]), ignore_index = True)
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
_