我在 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循环周期中更新值,为什么?
Python Pandas 向DataFrame中添加一行/一列