我在 Pandas 的 Dataframe 中添加了一行 3 次。但是,只添加了最后一行

Posted

技术标签:

【中文标题】我在 Pandas 的 Dataframe 中添加了一行 3 次。但是,只添加了最后一行【英文标题】:I added a row to Dataframe of pandas 3 times. However, only the last line is added 【发布时间】:2019-09-22 01:48:00 【问题描述】:

我写了一个函数。 使用追加添加了 3 次数据框。 但是结果只加了最后一次。

====== ・首先在函数外声明数据帧类型是错误的。 所以我在一个函数中声明了它。

·后来,我在 def AddDataframe (ymd, sb, vol) 之外写了 Dataframe :.然后我得到一个错误。错误如下。

NameError: 名称 'Hisframe10' 未定义

import pandas as pd
def AddDataframe(ymd,sb,vol):
  data='yyyymmdd':[],
      'Sell':[],
      'Buy':[],
      'Volume':[],        
      'JPX':[],
      'FutPrice':[]
  Hisframe8=pd.DataFrame(data)
  Hisframe8
  print('')
  print('Hisframe8= ',Hisframe8)
  adddata='yyyymmdd':[ymd],
    'Sell':[sb],
    'Buy':['Nan'],
    'Volume':[vol],           
    'JPX':[-1],
    'FutPrice':[0.]
  Hisframe10=pd.DataFrame(adddata)
  Hisframe10
  return(Hisframe8.append(Hisframe10))
AddDataframe('2019-05-03','sell',123)
AddDataframe('2019-05-04','sell',345)
AddDataframe('2019-05-05','sell',456)
#Hisframe10  #err

====== 我想添加 3 行数据框。 我该怎么做?

https://imgur.com/i1lAB8M

【问题讨论】:

你需要传入一个数据框来追加 Hisframe8=pd.DataFrame(data) 应该在函数之外;每次调用函数时都会覆盖 Dataframe(通过创建新的 Dataframe)。 @wpercy 谢谢你的来信。 @GeorgPoe 谢谢你解释原因。 【参考方案1】:

您可以将Hisframe8 设为全局

import pandas as pd

Hisframe8=pd.DataFrame(columns=['yyyymmdd','Sell','Buy','Volume','JPX','FutPrice'])

def AddDataframe(ymd,sb,vol):
    global Hisframe8
    adddata='yyyymmdd':[ymd],'Sell':[sb],'Buy':['Nan'],'Volume':[vol],'JPX':[-1],'FutPrice':[0.]
    Hisframe10=pd.DataFrame(adddata)
    Hisframe8 = Hisframe8.append(Hisframe10)


AddDataframe('2019-05-03','sell',123)
AddDataframe('2019-05-04','sell',345)
AddDataframe('2019-05-05','sell',456)
print(Hisframe8)

【讨论】:

我明白了。您在函数中使用 [global]。非常感谢。 这正是我正在寻找的答案。我很感激你。【参考方案2】:

您不必创建额外的数据框并将其附加到第一个数据框。 您可以改为将字典附加到现有的 df 中,如下所示:append dictionary to data frame

另外一种更好的样式可能是定义您首先插入的数据框,因为这不是您的函数的主要用途。

我的建议:

structure = 'date':[], 'Sell':[], 'Buy':[], 'Volume':[], 'JPX':[], 'FutPrice':[]
df = pd.DataFrame(structure)

def add_data(df, date, sb, vol):
   insert_dict = 'date':[date], 'Sell':[sb], 'Buy':[np.nan],
                  'Volume':[vol], 'JPX':[-1], 'FutPrice':[0.]

   return df.append(insert_dict , ignore_index = True)

df_appended = add_data(df, '2019-01-01', 'sell', 456)

希望对你有帮助

【讨论】:

非常感谢。但是,如果添加如下所示的三行,则仅包括最后一行。如果您发现任何问题,请告诉我。 import pandas as pd import numpy as np structure = 'date':[], 'Sell':[], 'Buy':[], 'Volume':[], 'JPX' :[], 'FutPrice':[] df = pd.DataFrame(structure) def add_data(df, date, sb, vol): insert_dict = 'date':[date], 'Sell':[sb], '购买':[np.nan],'音量':[vol],'JPX':[-1],'FutPrice':[0.] return(df.append(insert_dict,ignore_index = True))df_appended = add_data(df, '2019-01-01', 'sell', 123) df_appended = add_data(df, '2019-01-02', 'sell', 345) df_appended = add_data(df, '2019-01- 03', '卖', 456) df_appended @saru999 你需要在函数中引用新创建的df。如果要向“df_appended”添加更多行,则需要像这样调用函数:> add_data(df_appended, '2019-01-01', 'sell', 123)。否则你只追加到实际上没有改变的“df”,因为我们创建了新的数据框“df_appended”。

以上是关于我在 Pandas 的 Dataframe 中添加了一行 3 次。但是,只添加了最后一行的主要内容,如果未能解决你的问题,请参考以下文章

((Python)pandas.DataFrame不在每个for循环周期中更新值,为什么?

Pandas中 DataFrame中添加一行/一列

Python Pandas 向DataFrame中添加一行/一列

Pandas:将系列添加到按列排序的 DataFrame

如何在 for 循环中向 Pandas Dataframe 添加字符串值?

向 pandas DataFrame 添加多个空列