2016-11-30 58 views
1

我有一個數據幀,看起來如下:填充數據框柱同樣

ID Name 
1  Missing 
2  Missing 
3  Missing 
....... 

有沒有一種方式,我可以在列名填寫同樣(+1)如果len(DF)是不均勻的用我存儲的名稱數(一個列表或一個字典)。例如,如果我有2個名字。列的一半是Name1,另一半是Name2。 我想:

for i in (range(len(df)/no_names)): 
    counter=0 
    df.ix[i]['Name'] = dictionary.values()[0] 

但這將根據有多少名有隻填寫我的第N行。

回答

1

我第一次嘗試python的問題,這絕對不是最有效的解決方案。

import pandas as pd 
df = pd.DataFrame({'a':[1,4,4,0,4,0,4,0],'b':[2,1,4,0,4,0,4,0]}) 
#df 
#Out[76]: 
# a b 
#0 1 2 
#1 4 1 
#2 3 3 
#3 4 4 
#4 0 0 
#5 4 4 
#6 0 0 
#7 4 4 
#8 0 0 

根據每列的長度,重複NAME 1和NAME相應

df['new'] = np.repeat(np.array(["A", "B"]), repeats=[round(df.shape[0]/2), df.shape[0]-round(df.shape[0]/2)]) 

#Out[81]: 
# a b new 
#0 1 2 A 
#1 4 1 A 
#2 3 3 A 
#3 4 4 A 
#4 0 0 B 
#5 4 4 B 
#6 0 0 B 
#7 4 4 B 
#8 0 0 B 
2

你可以使用

import numpy as np 
N = len(df) 
df['Name'] = np.array(['Name1', 'Name2'])[np.linspace(0,2,N,endpoint=False).astype(int)] 

這裏的想法是創建0的數組和1,如

In [34]: np.linspace(0,2,11,endpoint=False).astype(int) 
Out[34]: array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]) 

現在我們可以使用NumPy的索引創建「名稱1」和「名稱2」值的數組:

In [8]: np.array(['Name1', 'Name2'])[np.linspace(0,2,11,endpoint=False).astype(int)] 
Out[8]: 
array(['Name1', 'Name1', 'Name1', 'Name1', 'Name1', 'Name1', 'Name2', 
     'Name2', 'Name2', 'Name2', 'Name2'], 
     dtype='<U5') 
+0

那親愛的先生是驚人的。 –

+0

使用你的方法unutbu我有一個結果,但是當打印數據幀時,我得到一個錯誤:一個值試圖從DataFrame的切片副本上設置。 嘗試使用.loc [row_indexer,col_indexer] =值代替 添加iloc doens't解決它,相反沒有結果我的打印 –

+0

此警告 - 我相信這是一個UserWarning,而不是一個例外 - 是說'df'是另一個DataFrame片段的*副本*。警告在那裏,請大家注意,修改'df'可能不會影響原始的DataFrame。如果這不是你的意圖,你可以忽略UserWarning。請參閱http://stackoverflow.com/q/40033471/190597瞭解更多信息和沉默UserWarning的方法。 – unutbu