Python 向具有特定索引名的数据帧添加新行

Python 向具有特定索引名的数据帧添加新行,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试使用特定的索引名'e'向数据框添加新行 number variable values a NaN bank true b 3.0 shop false c 0.5 market true d NaN government true 我尝试了以下方法,但它创建了一个新列而不是新行 new_row = [1.0, '

我正在尝试使用特定的索引名
'e'
向数据框添加新行

    number   variable       values
a    NaN       bank          true   
b    3.0       shop          false  
c    0.5       market        true   
d    NaN       government    true   
我尝试了以下方法,但它创建了一个新列而不是新行

new_row = [1.0, 'hotel', 'true']
df = df.append(new_row)

仍然不知道如何插入具有特定索引的行。如果您有任何建议,我们将不胜感激。

如果您想一次添加多行,请通过将列表转换为数据帧来使用append

df = df.append(pd.DataFrame([new_row],index=['e'],columns=df.columns))
或单排(谢谢@Zero)

输出:

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 数字变量值 阿楠银行真的吗 b 3.0商店假 c 0.5市场真实值 德南政府真的吗 真e 1.0酒店
您可以使用
df.loc[\u尚未\u现有的\u索引\u标签]=新的\u行

演示:

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


更新:

如果索引为a,则在最近的Pandas/Python3中可能不起作用 DateTimeIndex和新行的索引不存在

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

演示(使用熊猫:0.23.4):


如果它是您需要的第一行:

df = Dataframe(columns=[number, variable, values])
df.loc['e', [number, variable, values]] = [1.0, 'hotel', 'true']

在索引和列名冲突的情况下,应该是正确的实现。

Wow super simple。但愿我用过。都是关于timings@Bharathshetty,是的,如果我需要添加一行,如果我需要添加2+行,我使用这个方法-i;我使用你的方法(
df.append(另一个df)
)我在我的回答中添加了这一点
df.append(pd.Series)(新行,index=df.columns,name='e')
--Series应该可以用于单行。@yeliabsalohcin,它可以工作-请查看更新的答案@Zero的可能重复项我已经阅读了链接中的答案,但他们正在讨论在那里添加随机值。
df.append(pd.Series(新行,index=df.columns,name='e'))
series应该可以。@Zero series是我的第一个想法,与名称和索引有点混淆。因此,我选择了DataFrame方法。我更新了我的答案。我想成为第一个这样回答的人。这适用于带有DateTimeIndex的pandas DataFrame,当它试图添加一个包含索引中不存在的新datetime的行时。
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
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)
df = Dataframe(columns=[number, variable, values])
df.loc['e', [number, variable, values]] = [1.0, 'hotel', 'true']
df.loc['e', :] = [1.0, 'hotel', 'true']