假設我有一個包含10個鍵值對的字典。每個條目都擁有一個numpy數組。但是,它們的長度不一樣。從字典中創建條目具有不同長度的數據框
如何創建一個數據框,其中每列包含不同的條目?
當我嘗試:
pd.DataFrame(my_dict)
我得到:
ValueError: arrays must all be the same length
任何方式來解決這個?我很高興Pandas使用NaN
填充較短條目的列。
假設我有一個包含10個鍵值對的字典。每個條目都擁有一個numpy數組。但是,它們的長度不一樣。從字典中創建條目具有不同長度的數據框
如何創建一個數據框,其中每列包含不同的條目?
當我嘗試:
pd.DataFrame(my_dict)
我得到:
ValueError: arrays must all be the same length
任何方式來解決這個?我很高興Pandas使用NaN
填充較短條目的列。
在Python 3.X:
In [6]: d = dict(A = np.array([1,2]), B = np.array([1,2,3,4]))
In [7]: DataFrame(dict([ (k,Series(v)) for k,v in d.items() ]))
Out[7]:
A B
0 1 1
1 2 2
2 NaN 3
3 NaN 4
在Python 2.x中:
與d.iteritems()
取代d.items()
。
這裏有一個簡單的方法來做到這一點:
In[20]: my_dict = dict(A = np.array([1,2]), B = np.array([1,2,3,4]))
In[21]: df = pd.DataFrame.from_dict(my_dict, orient='index')
In[22]: df
Out[22]:
0 1 2 3
A 1 2 NaN NaN
B 1 2 3 4
In[23]: df.transpose()
Out[23]:
A B
0 1 1
1 2 2
2 NaN 3
3 NaN 4
儘管這並不直接回答OP的問題。我發現這是我的情況的最佳解決方案,當我有不平等的陣列,我想與大家分享:
In [31]: d = {'one' : Series([1., 2., 3.], index=['a', 'b', 'c']),
....: 'two' : Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
....:
In [32]: df = DataFrame(d)
In [33]: df
Out[33]:
one two
a 1 1
b 2 2
c 3 3
d NaN 4
我工作的這個相同的問題最近,這比什麼更好我有!有一點需要注意,使用NaN填充會將系列dtype強制爲float64,如果您需要進行整數運算,這可能會有問題。 – mattexx
表示正確;如果你想要的話,你可以使用fillna(0),儘管 – Jeff
@mattexx你還在SO上嗎?我有一個我自己的數據框問題,你的評論可能實際上是 – theprowler