【问题标题】:append row to empty dataframe returns empty dataframe将行附加到空数据帧返回空数据帧
【发布时间】:2020-11-11 05:22:15
【问题描述】:

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

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

我想要做的是将 Series 对象 附加到具有特定索引的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对象添加到特定索引会返回空数据框?

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

【问题讨论】:

  • 你在第二个代码块中写了emtpy_df,而不是empty_df
  • 您不应该用columns=['a','b','c'] 发起empty_df 吗? .loc assignments 似乎与相应的索引对齐,在本例中为 columns
  • @MichaelSzczesny 那是我的错误。我修改了它。
  • @QuangHoang 如果我将列设置为空数据框,它可以正常工作。但是,如何将行追加到在追加之前未设置列的数据框中?
  • 你需要看pd.concatmerge,或join

标签: python pandas


【解决方案1】:

所以这行不通,因为你的 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

【讨论】:

    【解决方案2】:

    如果你事先知道列名,你应该在创建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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2023-04-10
      • 2016-12-17
      • 2012-03-09
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多