Python 在2个索引时追加数据帧

Python 在2个索引时追加数据帧,python,pandas,python-2.x,Python,Pandas,Python 2.x,将创建一个空数据帧: results = pd.DataFrame(columns=['age','timestamp','score']).set_index(['age', 'timestamp']) 并且更多的数据帧将附加到初始的结果数据帧 result = pd.DataFrame({'age': age, 'timestamp': timestamp, 'score': s

将创建一个空数据帧:

results = pd.DataFrame(columns=['age','timestamp','score']).set_index(['age', 'timestamp'])
并且更多的数据帧将附加到初始的
结果
数据帧

    result = pd.DataFrame({'age': age,
                          'timestamp': timestamp,
                          'score': score
                            }).set_index(['age', 'timestamp'])

    # error then occurs at this point

    results.append(result)
我们得到了错误

ValueError: If using all scalar values, you must pass an index

附加第二个数据帧的正确方法是什么

试试这个。因为您新添加的记录只有一行。通过新的数据帧初始化它会带来开销。只需通过
将dict传递给当前df即可。loc
在您的情况下有效

请注意,逐个添加记录并不能提高性能。但是如果这是不可避免的代码逻辑的一部分,那么
.loc
将为您提供比
pd.append()
pd.concat()更好的性能


您的问题是,您正在传递dict,当您传递数据的dict时,值需要是可编辑的,因此np数组、列表或序列如果您不需要将
结果
作为
数据帧
,直到所有附加完成,那么收集元组列表中的所有数据会更快,然后一次性构建数据框架:
result=pd.DataFrame(results,columns=[…])。设置索引([…])
import pandas as pd
import numpy as np
import datetime as dt

# create an empty df
results = pd.DataFrame(columns=['age', 'timestamp', 'score'])
Out[71]: 
Empty DataFrame
Columns: [age, timestamp, score]
Index: []

# write new record in dict, make sure the keys match df column names
new_record = {'age': 23, 'timestamp': dt.datetime(2015,1,1), 'score':98}
# use .loc to enlarge the current df
results.loc[len(results)] = new_record

Out[73]: 
   age  timestamp  score
0   23 2015-01-01     98