2016-10-13 47 views
2

我有一個14列的表格,我想將選擇的一個拉入新的數據框。 比方說,我想列0,則列8-14在熊貓系列中嵌入一個範圍

dfnow = pd.Series([df.iloc[row_count,0], \ 
        df.iloc[row_count,8], \ 
        df.iloc[row_count,9], \ 
        .... 

作品,但似乎笨拙

我想寫

dfnow = pd.Series([df.iloc[row_count,0], \ 
      df.iloc[row_count, range (8, 14)]]) 

但是,這將引發一個ValueError:項數目錯誤通過

現在,從下面的答案中,我知道我可以創建兩個單獨的sereis並將它們連接起來,但是這似乎也有點不理想。

Adding pandas Series with different indices without getting NaNs

回答

0

我認爲可以將所有值轉換爲lists,然後創建Series,但隨後失去了指標:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (df) 
    A B C D E F 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

row_count = 1 

print (df.iloc[row_count, range (2, 4)]) 
C 8 
D 3 
Name: 1, dtype: int64 

dfnow = pd.Series([df.iloc[row_count,0]] + df.iloc[row_count, range (2, 4)].tolist()) 
print (dfnow) 
0 2 
1 8 
2 3 
dtype: int64 

或者你可以使用concat,那麼指數是列名:

row_count = 1 

a = df.iloc[row_count, range (2, 4)] 
b = df.iloc[row_count, range (4, 6)] 

print (a) 
C 8 
D 3 
Name: 1, dtype: int64 

print (b) 
E 3 
F 4 
Name: 1, dtype: int64 

print (pd.concat([a,b])) 
C 8 
D 3 
E 3 
F 4 
Name: 1, dtype: int64 

但是,如果需要添加標(a),這是一個有點複雜 - 需要Series

row_count = 1 

a = pd.Series(df.iloc[row_count, 0], index=[df.columns[0]]) 
b = df.iloc[row_count, range (2, 4)] 
c = df.iloc[row_count, range (4, 6)] 

print (a) 
A 2 
dtype: int64 

print (b) 
C 8 
D 3 
Name: 1, dtype: int64 

print (c) 
E 3 
F 4 
Name: 1, dtype: int64 

print (pd.concat([a,b,c])) 
A 2 
C 8 
D 3 
E 3 
F 4 
dtype: int64 
+0

這個工作,並且我通過以下方式維護了索引:.... df.iloc [row_count,range(9,14) ] .tolist(),index = columns)。謝謝 – user2723494

1

這是你想要的嗎?

In [52]: df = pd.DataFrame(np.arange(30).reshape(5,6), columns=list('abcdef')) 

In [53]: df 
Out[53]: 
    a b c d e f 
0 0 1 2 3 4 5 
1 6 7 8 9 10 11 
2 12 13 14 15 16 17 
3 18 19 20 21 22 23 
4 24 25 26 27 28 29 

In [54]: df[[0,2,4]] 
Out[54]: 
    a c e 
0 0 2 4 
1 6 8 10 
2 12 14 16 
3 18 20 22 
4 24 26 28 

連接的(重塑)列024成單系列:

In [68]: df[[0,2,4]].values.T.reshape(-1,) 
Out[68]: array([ 0, 6, 12, 18, 24, 2, 8, 14, 20, 26, 4, 10, 16, 22, 28]) 

In [69]: pd.Series(df[[0,2,4]].values.T.reshape(-1,)) 
Out[69]: 
0  0 
1  6 
2  12 
3  18 
4  24 
5  2 
6  8 
7  14 
8  20 
9  26 
10  4 
11 10 
12 16 
13 22 
14 28 
dtype: int32 
+0

謝謝您的答覆。我認爲重塑會起作用,並且可能是我嘗試完成的更爲接受的過程+1 – user2723494

1

考慮df

from string import ascii_uppercase 
import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.arange(150).reshape(-1, 15), 
        columns=list(ascii_uppercase[:15])) 
df 

enter image description here

使用np.r_來構建切片陣列neccesary你想

np.r_[0, 8:14] 

array([ 0, 8, 9, 10, 11, 12, 13]) 

然後切片

df.iloc[:, np.r_[0, 8:14]] 

enter image description here