向具有特定索引名称的Pandas DataFrame添加新行

sam*_*mba 25 python dataframe pandas

我正在尝试使用特定的索引名称向DataFrame添加新行'e'.

    number   variable       values
a    NaN       bank          true   
b    3.0       shop          false  
c    0.5       market        true   
d    NaN       government    true   
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但是它创建了一个新列而不是一个新行.

new_row = [1.0, 'hotel', 'true']
df = df.append(new_row)
Run Code Online (Sandbox Code Playgroud)

仍然不明白如何插入具有特定索引的行.将不胜感激任何建议.

Max*_*axU 39

你可以用df.loc[_not_yet_existing_index_label_] = new_row.

演示:

In [3]: df.loc['e'] = [1.0, 'hotel', 'true']

In [4]: df
Out[4]:
   number    variable values
a     NaN        bank   True
b     3.0        shop  False
c     0.5      market   True
d     NaN  government   True
e     1.0       hotel   true
Run Code Online (Sandbox Code Playgroud)

PS使用此方法无法添加已存在(重复)索引值(标签)的行 - 在这种情况下,将更新具有此索引标签的行.


更新:

如果索引是DateTimeIndex并且新行的索引不存在,这可能在最近的Pandas/Python3中不起作用.

如果我们指定正确的索引值,它将起作用.

演示(使用pandas: 0.23.4):

In [17]: ix = pd.date_range('2018-11-10 00:00:00', periods=4, freq='30min')

In [18]: df = pd.DataFrame(np.random.randint(100, size=(4,3)), columns=list('abc'), index=ix)

In [19]: df
Out[19]:
                      a   b   c
2018-11-10 00:00:00  77  64  90
2018-11-10 00:30:00   9  39  26
2018-11-10 01:00:00  63  93  72
2018-11-10 01:30:00  59  75  37

In [20]: df.loc[pd.to_datetime('2018-11-10 02:00:00')] = [100,100,100]

In [21]: df
Out[21]:
                       a    b    c
2018-11-10 00:00:00   77   64   90
2018-11-10 00:30:00    9   39   26
2018-11-10 01:00:00   63   93   72
2018-11-10 01:30:00   59   75   37
2018-11-10 02:00:00  100  100  100

In [22]: df.index
Out[22]: DatetimeIndex(['2018-11-10 00:00:00', '2018-11-10 00:30:00', '2018-11-10 01:00:00', '2018-11-10 01:30:00', '2018-11-10 02:00:00'], dtype='da
tetime64[ns]', freq=None)
Run Code Online (Sandbox Code Playgroud)

  • `df.append(pd.Series(new_row,index = df.columns,name ='e')` - 系列应该用于单行. (3认同)
  • 哇超级简单。希望我用过那个。一切都与时间有关 (2认同)
  • 我在答案中添加了这一点。:) (2认同)

Flo*_*oor 10

如果要一次添加多行,请使用追加转换列表数据帧

df = df.append(pd.DataFrame([new_row],index=['e'],columns=df.columns))
Run Code Online (Sandbox Code Playgroud)

或单排(谢谢@Zero)

df = df.append(pd.Series(new_row, index=df.columns, name='e'))
Run Code Online (Sandbox Code Playgroud)

输出:

  number    variable values
a     NaN        bank   True
b     3.0        shop  False
c     0.5      market   True
d     NaN  government   True
e     1.0       hotel   true