将行追加到空数据框返回空数据框

时间:2020-11-10 15:42:47

标签: python pandas

我从以下位置生成了空数据框:

empty_df = pd.DataFrame(index = ['100', '75', '50'])

我想要做的是将系列对象附加到具有特定索引的empty_df中:

    empty_df.loc['75'] = pd.Series({'a': 1, 'b' : 2, 'c' : 3})
    empty_df.loc['100'] = pd.Series({'a': 4, 'b' : 5, 'c' : 6})

但是,empty_df返回索引为100、75、50的空数据帧。

最终结果必须是:

    a     b     c
100 4     5     6
75  1     2     3

为什么向特定索引添加 Series对象会返回空数据框?

相关解决方案也不起作用。

2 个答案:

答案 0 :(得分:0)

如果您事先知道列名,则应在创建DataFrame时进行设置,在这种情况下,您甚至不需要设置index,如下所示:

import pandas as pd

empty_df = pd.DataFrame(columns=['a', 'b', 'c'])
empty_df.loc['75'] = pd.Series({'a': 1, 'b' : 2, 'c' : 3})
empty_df.loc['100'] = pd.Series({'a': 4, 'b' : 5, 'c' : 6})

print(empty_df)
     a  b  c
75   1  2  3
100  4  5  6

如果您事先不知道列名,则可以使用append,如下所示:

empty_df = pd.DataFrame()
empty_df = empty_df.append(pd.Series({'a': 1, 'b' : 2, 'c' : 3}, name='75'))
empty_df = empty_df.append(pd.Series({'c': 3, 'd' : 4, 'e' : 5}, name='100'))

print(empty_df)
       a    b    c    d    e
75   1.0  2.0  3.0  NaN  NaN
100  NaN  NaN  3.0  4.0  5.0

请注意,如果您以与先前添加的Series相同的名称添加Series,则它不会替换DataFrame中该索引处的值,而只是将具有相同索引的新系列附加如下:

empty_df = empty_df.append(pd.Series({'a': 1, 'b' : 2, 'c' : 3}, name='75'))
print(empty_df)
       a    b    c    d    e
75   1.0  2.0  3.0  NaN  NaN
100  NaN  NaN  3.0  4.0  5.0
75   1.0  2.0  3.0  NaN  NaN

答案 1 :(得分:0)

因此,这是行不通的,因为您的empty_df没有这些列a,b和c,因此我们需要首先添加它们。

因此,假设您不预先知道列名称,那么可以使用.reindex()添加列名称。

如果您确实知道列名,那么只需使用Clement Moline的解决方案即可。

empty_df = pd.DataFrame(index = ['100', '75', '50'])
series1 = pd.Series({'a': 1, 'b' : 2, 'c' : 3})
series2 = pd.Series({'a': 4, 'b' : 5, 'c' : 6})

empty_df = empty_df.reindex(columns=series1.keys())

empty_df.loc['75'] = series1
empty_df.loc['100'] = series2

empty_df.dropna()

结果数据框:

    a   b   c
100 4.0 5.0 6.0
75  1.0 2.0 3.0