我从以下位置生成了空数据框:
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对象会返回空数据框?
相关解决方案也不起作用。
答案 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