使用Pandas在 Dataframe 中追加空行

qeeaahzv  于 2022-12-16  发布在  其他
关注(0)|答案(9)|浏览(487)

我试图在 Dataframe 的末尾添加一个空行,但无法做到,甚至试图了解Pandas如何使用append函数,但仍然没有得到它。
下面是代码:

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'))

有两列和随机数行。
在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
gywdnpxw

gywdnpxw1#

下面的代码对我很有效。

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

eh57zj3b2#

假设你的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
wmtdaxz3

wmtdaxz33#

您还可以用途:

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

其中loc是空行索引。

2wnc66cl

2wnc66cl4#

@Dave Reikher的回答是最好的解决方案。

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

下面是不使用NumPy库的类似答案

df.loc[len(df.index)] = ['' for x in df.columns.values.tolist()]
  • len(df.index) =行数。始终比索引计数多1。
  • 使用df.loc[len(df.index)]可以选择下一个可用的索引号(行)。
  • df.iloc[-1].name + 1等于df.loc[len(df.index)]
  • 除了使用NumPy,您还可以使用python解析
  • 根据列名创建列表:df.columns.values.tolist()
  • 根据列数创建空字符串“”的新列表。
  • ['' for x in df.columns.values.tolist()]
qvtsj1bj

qvtsj1bj5#

添加一个新的Pandas.使用Pandas系列.DataFrame.append().
如果要指定新行的名称(也称为“索引”),请用途:

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

如果不希望命名新行,请用途:

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

其中df是您的pandas.DataFrame。

g0czyy6m

g0czyy6m6#

您可以通过如下方式将一个Series附加到数据框来添加它。我假设空白表示您希望添加只包含“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
ih99xse1

ih99xse17#

您可以添加一个新的系列,同时命名它。名称将是新行的索引,并且所有值将自动为NaN。

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

e0bqpujr8#

假设df是您的 Dataframe ,

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
uqzxnwby

uqzxnwby9#

将“空”行追加到数据框并填充所选单元格:

生成空 Dataframe (无行,只有列ab):

import pandas as pd    
col_names =  ["a","b"]
df  = pd.DataFrame(columns = col_names)

在数据框的 * 结尾 * 追加空行:

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


现在填充a列中 Dataframe 末尾(len(df)-1)的空单元格:

df.loc[[len(df)-1],'a'] = 123

结果:

a    b
0  123  NaN

当然,用户可以遍历行并填充单元格:

col_names =  ["a","b"]
df  = pd.DataFrame(columns = col_names)
for x in range(0,5):
    df = df.append(pd.Series(), ignore_index = True)
    df.loc[[len(df)-1],'a'] = 123

结果:

a    b
0  123  NaN
1  123  NaN
2  123  NaN
3  123  NaN
4  123  NaN

相关问题