【问题标题】:Appending row to pandas DF adds 0 column - clarification将行附加到 pandas DF 添加 0 列 - 澄清
【发布时间】:2018-08-23 22:28:04
【问题描述】:

我找到了位于此处的线程:

Appending row to pandas df adds 0 column

但我仍然不明白我做错了什么。

df4 = pd.DataFrame({'Q':['chair', 'desk', 'monitor', 'chair'], 'R':['red', 'blue', 'yellow', 'purple'], 'S': ['english', 'german', 'spanish', 'english']})

df4

         Q       R        S
0    chair     red  english
1     desk    blue   german
2  monitor  yellow  spanish
3    chair  purple  english


>> df5 = df4

>>> df5 = df5.append(['Q'] * 2, ignore_index=True)

>>> df5

         Q       R        S    0
0    chair     red  english  NaN
1     desk    blue   german  NaN
2  monitor  yellow  spanish  NaN
3    chair  purple  english  NaN
4      NaN     NaN      NaN    Q
5      NaN     NaN      NaN    Q
>>> 

在我的特殊情况下,为什么要添加 0 列?我的初始 DF 不为空。

【问题讨论】:

  • 因为您没有指定新值所属的列。试试df4.append([{'Q': 'Q'}] * 2, ignore_index=True) 看看有什么不同

标签: python python-3.x pandas dataframe


【解决方案1】:

熊猫附加状态的帮助页面: “将其他行追加到此帧的末尾,返回一个新对象。不在此帧中的列将添加为新列。”

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.append.html

在您的情况下,您没有提供任何列名,因此创建了新的列名。

添加新行的许多方法。一种方式:

df5 = df5.append({'Q':'Q', 'R':'Q', 'S':'Q'}, ignore_index=True)

【讨论】:

    【解决方案2】:

    您正在尝试将列表 ['Q', 'Q'] 附加到具有 3 列的数据框。这是模棱两可的。

    由于不清楚,Pandas 决定在追加之前将['Q', 'Q'] 传递给pd.DataFrame 构造函数:

    out1 = df5.append(pd.DataFrame(['Q'] * 2), ignore_index=True)
    out2 = df5.append(['Q'] * 2, ignore_index=True)
    
    assert out1.equals(out2)  # no error, i.e. these are equal
    

    如果您仍然感到困惑,请尝试打印从单个列表构造的数据框:

    print(pd.DataFrame(['Q'] * 2))
    
       0
    0  Q
    1  Q
    

    由于没有指定列名,因此您有一个标记为0 的列。当附加到具有不同列的数据框时,您必然会在结果中看到一个额外的列。

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多