【问题标题】:Getting error when adding a new row to my existing dataframe in pandas在 Pandas 中向我现有的数据框添加新行时出错
【发布时间】:2023-03-22 01:12:01
【问题描述】:

我有以下数据框。

df3=pd.DataFrame(columns=["Devices","months"])

我从循环中获取行值 排, 打印(数据)

    Devices     months
1  Powerbank  Feb month

当我将此数据行添加到我的 df3 时,我收到了一个错误。

  df3.loc[len(df3)]=data

ValueError: 无法设置列不匹配的行

【问题讨论】:

标签: python pandas dataframe data-analysis


【解决方案1】:

使用

df3 = pd.concat([df3, data], axis=0)

或按照@Wen 的建议使用

df3 = df3.append(data)

【讨论】:

  • axis=0 是默认值,可以省略
  • 如果不使用ignore_index那么可能会出现错误。 df3 = df3.append(data, ignore_index=True )
【解决方案2】:

来自https://pandas.pydata.org/pandas-docs/stable/merging.html

但值得注意的是,concat(因此 append)会生成数据的完整副本,并且不断重用此函数会显着降低性能。如果您需要对多个数据集使用该操作,请使用列表推导式。

您应该使用 loc,就像您尝试做的那样,并使用字典,其中键是列名,值是要添加的行的数据。

import pandas as pd

df3 = pd.DataFrame(columns=["Devices","months"])
new_entry = {'Devices': 'device1', 'months': 'month1'}

df3.loc[len(df3)] = new_entry

【讨论】:

  • 如何使用上述技术将数据帧附加到现有数据帧?
【解决方案3】:

如果有人想添加字典格式的新行,下面会有所帮助。

  • 现有数据帧
In [6]: df
Out[6]: 
     Devices     months
0  Powerbank  Feb month

In [7]:
  • 下面的 sn-p 向现有 DataFrame 添加另一行。
In [7]: dictionary_row = {"Devices":"Laptop","months":"Mar month"}

In [8]: df = df.append(dictionary_row, ignore_index=True)

In [9]: df
Out[9]: 
     Devices     months
0  Powerbank  Feb month
1     Laptop  Mar month

In [10]:

希望对您有所帮助。

【讨论】:

    【解决方案4】:

    由于错误提示插入到dataframe 的数据的列数必须与dataframe 的列数匹配

    >>> df3=pd.DataFrame(columns=["Devices","months"])
    >>> df3.loc[len(df3)] = ['Powerbank','Feb']
    >>> df3
         Devices months
    0  Powerbank    Feb
    >>> data = ['powerbank','feb']
    >>> df3.loc[len(df3)] = data
    >>> df3
         Devices months
    0  Powerbank    Feb
    1  powerbank    feb
    

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2021-06-20
      相关资源
      最近更新 更多