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