好的,所以我有一个预先创建的数据帧,我尝试将一个列表附加到它。在简化版本中,问题如下。
df = pd.DataFrame({'One': [],
'Another' : [],
'Third' : [],
'Last' : []})
然后我用列表做一些事情:
new_obj = []
new_obj.append('1')
new_obj.append('2')
#I have to do the extend operation here
new_obj.extend(['3','4'])
现在我只想将我的new_obj
列表添加到我的数据框中,对象的顺序与数据帧中我想要的顺序相同。
所以我只是这样做:
df.loc[len(df.index)] = new_obj
结果我有:
Another Last One Third
0 1 2 3 4
为什么?为什么它将列顺序更改为aphabetic列顺序。如何在追加时保留它?
答案 0 :(得分:2)
您的行df.loc[len(df.index)] = new_obj
未更改列的顺序。
字典键是无序的,因此当您将字典传递给pd.DataFrame()以创建数据帧时,您的列不一定按照您编写它们的顺序。
尝试此确认:
df = pd.DataFrame({'One': [],
'Another' : [],
'Third' : [],
'Last' : []})
df.columns
索引(['另一个','最后','一个','三'],dtype ='对象& #39)
...如果你关心列的顺序,而是像这样初始化你的df:
columns = ['one', 'another', 'third', 'last']
df = pd.DataFrame(columns=columns)
答案 1 :(得分:2)
请注意,Python中的dict
本质上是无序的。为了指定您可以编写的DataFrame
(或用户collections.OrderedDict
)的正确顺序:
df = pd.DataFrame({'One': [],
'Another' : [],
'Third' : [],
'Last' : []}, columns=["One", "Another", "Third", "Last"])
另一方面,如果你真的不关心DataFrame
中的顺序,你可以通过简单地使用{{1}明确定义你正在添加list
的列。而是:
dict
答案 2 :(得分:1)
正如其他人提到的那样,没有订购dictonary键。如果你想订购dict使用orderddict,如下所示
import pandas as pd
import collections
mydict = collections.OrderedDict((('One', []),
('Another', []),
('Third', []),
('Last', [])))
df = pd.DataFrame.from_dict(mydict)
new_obj = []
new_obj.append('1')
new_obj.append('2')
#I have to do the extend operation here
new_obj.extend(['3','4'])
df.loc[len(df.index)] = new_obj
print df
结果
One Another Third Last
0 1 2 3 4
答案 3 :(得分:1)
将append
与参数ignore_index=True
df = pd.DataFrame(columns='One Another Third Last'.split())
new_obj = []
new_obj.append('1')
new_obj.append('2')
#I have to do the extend operation here
new_obj.extend(['3','4'])
# notice I created a `pd.Series` with `df.columns` as the index
df.append(pd.Series(new_obj, df.columns), ignore_index=True)
One Another Third Last
0 1 2 3 4