在2个索引时附加Pandas DataFrame

时间:2015-06-23 15:00:11

标签: python pandas python-2.x

创建一个空的pandas DataFrame:

results = pd.DataFrame(columns=['age','timestamp','score']).set_index(['age', 'timestamp'])

以及更多DataFrame将附加到最初的results DataFrame。

    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

附加第二个DataFrame的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

试试这个。由于您新添加的记录只有一行。通过新的数据帧初始化它会引入开销。只需通过.loc将dict传递给当前的df就可以了。

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

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