Добавьте пустую строку в dataframe с помощью 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'))

Есть два столбца и случайное число строк.

с "print f" in for loop я Получите это:

                             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 Standard
22                 Band Colour             Black
24                 Dial Colour             Black
26            Special Features       second-hand
28                    Movement            Quartz

Ответ 1

Добавьте новый pandas.Series с помощью pandas.DataFrame.append().

Если вы хотите указать имя (AKA "индекс") новой строки, используйте:

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

Если вы не хотите называть новую строку, используйте:

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

где df - ваши панды. DataFrame.

Ответ 2

Вы можете добавить его, добавив серию в dataframe следующим образом. Я предполагаю пустым, что вы хотите добавить строку, содержащую только "Нан". Вы можете сначала создать объект Series с Nan. Убедитесь, что вы указываете столбцы при определении объекта "Серии" в параметре -Index. Вы можете добавить его в 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

Ответ 3

Предполагая, что df - ваш фрейм данных,

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

где df_prime равен df дополнительному последнему ряду NaN.

Обратите внимание, что pd.concat медленный, поэтому, если вам нужна эта функция в цикле, лучше избегать ее использования. В этом случае, если ваш индекс является инкрементным, вы можете использовать

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

Ответ 4

Вы можете добавить новую серию и назвать ее одновременно. Имя будет индексом новой строки, и все значения автоматически будут NaN.

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

Ответ 5

Следующий код работал у меня.

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

Ответ 6

Предполагая, что ваш df.index отсортирован, вы можете использовать:

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

Хорошо обрабатывает различные индексы и типы столбцов.

[EDIT] работает с 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

Ответ 7

Вы также можете использовать:

your_dataframe.insert(loc=0, value=np.nan, column="")

где loc - ваш пустой индекс строки.

Ответ 8

Правильная функция:

pd.append(..., axis = 0) # axis = 0 for rows