pandas 向数据框追加一行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36270864/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 00:57:18  来源:igfitidea点击:

Append a row to a dataframe

pythonpython-3.xpandas

提问by Stacey

Fairly new to pandas and I have created a data frame called rollParametersDf:

对 Pandas 相当陌生,我创建了一个名为 rollParametersDf 的数据框:

 rollParametersDf = pd.DataFrame(columns=['insampleStart','insampleEnd','outsampleStart','outsampleEnd'], index=[])

with the 4 column headings given. Which I would like to hold the reference dates for a study I am running. I want to add rows of data (one at a time) with the index name roll1, roll2..rolln that is created using the following code:

带有 4 个列标题。我想保留我正在进行的一项研究的参考日期。我想添加使用以下代码创建的索引名称为 roll1、roll2..rolln 的数据行(一次一个):

            outsampleEnd = customCalender.iloc[[totalDaysAvailable]]
            outsampleStart = customCalender.iloc[[totalDaysAvailable-outsampleLength+1]]
            insampleEnd = customCalender.iloc[[totalDaysAvailable-outsampleLength]]
            insampleStart = customCalender.iloc[[totalDaysAvailable-outsampleLength-insampleLength+1]]

            print('roll',rollCount,'\t',outsampleEnd,'\t',outsampleStart,'\t',insampleEnd,'\t',insampleStart,'\t')

            rollParametersDf.append({insampleStart,insampleEnd,outsampleStart,outsampleEnd})

I have tried using append but cannot get an individual row to append.

我曾尝试使用 append 但无法获得要附加的单个行。

I would like the final dataframe to look like:

我希望最终的数据框看起来像:

     insampleStart insampleEnd outsampleStart outsampleEnd
roll1       1             5           6              8      
roll2       2             6           7              9
:
rolln

采纳答案by kilojoules

You give key-values pairs to append

你给键值对追加

df = pd.DataFrame({'insampleStart':[], 'insampleEnd':[], 'outsampleStart':[], 'outsampleEnd':[]})
df = df.append({'insampleStart':[1,2], 'insampleEnd':[5,6], 'outsampleStart':[6,7], 'outsampleEnd':[8,9]}, ignore_index=True)

回答by b-r-oleary

The pandas documentationhas an example of appending rows to a DataFrame. This appending action is different from that of a list in that this appending action generates a new DataFrame. This means that for each append action you are rebuilding and reindexing the DataFrame which is pretty inefficient. Here is an example solution:

pandas文档有一个将行附加到 DataFrame 的示例。此附加操作与列表的不同之处在于此附加操作会生成一个新的 DataFrame。这意味着对于每个附加操作,您都在重建和重新索引 DataFrame,这是非常低效的。这是一个示例解决方案:

# create empty dataframe
columns=['insampleStart','insampleEnd','outsampleStart','outsampleEnd']
rollParametersDf = pd.DataFrame(columns=columns)

# loop through 5 rows and append them to the dataframe
for i in range(5):
    # create some artificial data
    data = np.random.normal(size=(1, len(columns)))
    # append creates a new dataframe which makes this operation inefficient
    # ignore_index causes reindexing on each call.
    rollParametersDf = rollParametersDf.append(pd.DataFrame(data, columns=columns),
                                               ignore_index=True)

print rollParametersDf

   insampleStart  insampleEnd  outsampleStart  outsampleEnd
0       2.297031     1.792745        0.436704      0.706682
1       0.984812    -0.417183       -1.828572     -0.034844
2       0.239083    -1.305873        0.092712      0.695459
3      -0.511505    -0.835284       -0.823365     -0.182080
4       0.609052    -1.916952       -0.907588      0.898772